企业级信息系统开发讲课笔记4.4 Spring Boot加载自定义配置文件

news2024/11/26 12:19:37

文章目录

  • 零、学习目标
  • 一、为什么需要加载自定义配置文件
  • 二、使用@PropertySource加载自定义配置文件
    • (一)创建Spring Boot项目
    • (二)创建自定义配置文件
    • (三)创建自定义配置类
    • (四)编写测试方法
    • (五)运行测试方法
    • (六)修改测试方法代码
    • (七)再次运行测试方法
    • 课堂练习:在Web页面显示学生配置信息
  • 三、使用@ImportResource加载XML配置文件
    • (一)创建创建Spring Boot项目
    • (二)创建自定义服务类
    • (三)创建Spring配置文件
    • (四)加载自定义Spring配置文件
    • (五)编写测试方法
    • (六)运行测试方法
  • 四、使用@Configuration编写自定义配置类
    • (一)创建Spring Boot项目
    • (二)创建自定义服务类
    • (三)创建自定义配置类
    • (四)编写测试方法
    • (五)运行测试方法

零、学习目标

  1. 熟悉使用@PropertySource加载配置文件
  2. 熟悉使用@ImportResource加载XML配置文件
  3. 掌握使用@Configuration编写自定义配置类

一、为什么需要加载自定义配置文件

  • Spring Boot免除了项目中大部分的手动配置,对于一些特定情况,我们可以通过修改全局配置文件以适应具体生产环境,可以说,几乎所有的配置都可以写在application.peropertiesapplication.yaml文件中,Spring Boot会自动加载全局配置文件从而免除我们手动加载的烦恼。但是,如果我们自定义配置文件,Spring Boot是无法识别这些配置文件的,此时就需要我们手动加载。

二、使用@PropertySource加载自定义配置文件

(一)创建Spring Boot项目

  • 基于Spring Initializr创建Spring Boot项目
    在这里插入图片描述

  • 设置项目元数据
    在这里插入图片描述

  • 选择Spring Boot版本,添加相关依赖
    在这里插入图片描述

  • 设置项目名称与保存位置
    在这里插入图片描述

  • 单击【Finish】按钮
    在这里插入图片描述

(二)创建自定义配置文件

  • resources里创建myconfig.properties文件
    在这里插入图片描述

  • 说明:如果在配置文件里使用user.name,通过配置文件获取的值可能是操作系统中的用户名,因为操作系统中也是有user.name属性的。

  • 为了在属性文件里使用中文而不出现乱码,我们需要设置文件编码
    在这里插入图片描述

  • 设置学生的四个属性值
    在这里插入图片描述

(三)创建自定义配置类

  • net.huawei.boot包里创建config子包,在子包里创建StudentConfig
    在这里插入图片描述
package net.huawei.boot.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

/**
 * 功能:学生配置类
 * 作者:华卫
 * 日期:2023年05月30日
 */
@Component // Spring容器组件
@PropertySource("classpath:myconfig.properties") // 加载自定义配置文件
@ConfigurationProperties(prefix = "student") // 配置属性,设置前缀
public class StudentConfig {
    private String id; // 学号
    private String name; // 姓名
    private String gender; // 性别
    private int age; // 年龄

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "StudentConfig{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                ", age=" + age +
                '}';
    }
}

(四)编写测试方法

  • 打开自带的测试类ConfigDemo01ApplicationTests
    在这里插入图片描述

  • 注入学生配置实体,创建testStudentConfig()测试方法,在里面输出学生配置实体信息

package net.huawei.boot;

import net.huawei.boot.config.StudentConfig;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class ConfigDemo01ApplicationTests {

    @Autowired // 自动装配学生配置实体
    private StudentConfig studentConfig;

    @Test
    public void testStudentConfig() {
        // 输出学生配置实体信息
        System.out.println(studentConfig);
    }
}

(五)运行测试方法

  • 运行testStudentConfig()方法,查看结果
    在这里插入图片描述

(六)修改测试方法代码

  • 说明:注入的StudentConfig名称不必是studentConfig,在Spring Boot里,StudentConfig的注解@Component默认是单例的,因此不会因为注入名称是studentConfig1而产生的两个StudentConfig实例。
    在这里插入图片描述

(七)再次运行测试方法

  • 运行testStudentConfig()方法,查看结果
    在这里插入图片描述
  • 可以看到,StudentConfig注入名称改成student之后,测试结果依然相同,不受注入名称变化的任何影响。

课堂练习:在Web页面显示学生配置信息

  • 创建controller子包,在子包里创建StudentConfigController
    在这里插入图片描述

  • 运行入口类,在浏览器里访问http://localhost:8080/student
    在这里插入图片描述

  • 或者显示学生配置实体的JSON格式
    在这里插入图片描述

  • 或者逐个字段显示学生配置实体的信息
    在这里插入图片描述

三、使用@ImportResource加载XML配置文件

(一)创建创建Spring Boot项目

  • 基于Spring Initializr模板创建Spring Boot项目
    在这里插入图片描述

  • 设置项目元数据
    在这里插入图片描述

  • 选择Spring Boot版本,添加相关依赖
    在这里插入图片描述

  • 设置项目名称与保存位置
    在这里插入图片描述

  • 单击【Finish】按钮
    在这里插入图片描述

(二)创建自定义服务类

  • net.huawei.boot包里创建service子包,在子包里创建CustomService
    在这里插入图片描述
package net.huawei.boot.service;

/**
 * 功能:自定义服务类
 * 作者:华卫
 * 日期:2023年05月30日
 */
public class CustomService {
    public void welcome() {
        System.out.println("欢迎您访问泸州职业技术学院~");
    }
}

(三)创建Spring配置文件

  • resources里创建config目录,在config目录里创建spring-config.xml文件
    在这里插入图片描述

  • <beans>元素里添加子元素<bean>,定义自定义服务类的JavaBean

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <bean id="customService" class="net.huawei.boot.service.CustomService"/>

</beans>

(四)加载自定义Spring配置文件

  • 在入口类上添加注解@ImportResource("classpath: config/spring-config.xml")
    在这里插入图片描述

  • 在Spring Boot启动后,Spring容器中就会自动实例化一个名为customService的Bean对象

(五)编写测试方法

  • 打开自带的测试类ConfigDemo02ApplicationTests
    在这里插入图片描述

  • 注入在Spring配置文件里定义的Bean,创建testCustomService()测试方法,然后调用自定义Bean的方法

package net.huawei.boot;

import net.huawei.boot.service.CustomService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class ConfigDemo02ApplicationTests {

    @Autowired // 注入自定义服务实体
    private CustomService customService;
    
    @Test
    public void testCustomService() {
        // 调用自定义服务实体的方法
        customService.welcome();
    }
}

(六)运行测试方法

  • 运行testCustomService()方法,查看结果
    在这里插入图片描述

四、使用@Configuration编写自定义配置类

  • 我们知道,Spring Boot追求的是零配置文件。使用@Configuration编写自定义配置类,这是Spring Bboot的推荐方式

(一)创建Spring Boot项目

  • 基于Spring Initializr模板创建Spring Boot项目
    在这里插入图片描述

  • 设置项目元数据
    在这里插入图片描述

  • 选择Spring Boot版本,添加相关依赖
    在这里插入图片描述

  • 配置项目名称与保存位置
    在这里插入图片描述

  • 单击【Finish】按钮
    在这里插入图片描述

(二)创建自定义服务类

  • net.huawei.boot包里创建service子包,在子包里创建CustomService
    在这里插入图片描述
package net.huawei.boot.service;

/**
 * 功能:自定义服务类
 * 作者:华卫
 * 日期:2023年05月30日
 */
public class CustomService {
    public void welcome() {
        System.out.println("欢迎您访问泸州职业技术学院~");
    }
}

(三)创建自定义配置类

  • net.huawei.boot包里创建config子包,在子包里创建CustomConfig
    在这里插入图片描述

  • 添加注解@Configuration,指定配置类
    在这里插入图片描述

  • 创建获取Bean的getCustomService()方法

package net.huawei.boot.config;

import net.huawei.boot.service.CustomService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 功能:自定义配置类
 * 作者:华卫
 * 日期:2023年05月30日
 */
@Configuration
public class CustomConfig {
    @Bean(name = "cs") // 指定Bean的名称`cs`,否则采用默认名称`customService`
    public CustomService getCustomService() {
        return new CustomService();
    }
}

(四)编写测试方法

  • 打开自带的测试类ConfigDemo03ApplicationTests
    在这里插入图片描述
  • 注入在CustomConfig配置类里定义的Bean,创建testCustomService()方法,然后调用自定义Bean的方法
package net.huawei.boot;

import net.huawei.boot.service.CustomService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class ConfigDemo03ApplicationTests {

    @Autowired // 注入自定义服务实体
    private CustomService cs;

    @Test
    public void testCustomService() {
        // 调用自定义服务实体的方法
        cs.welcome();
    }
}

(五)运行测试方法

  • 运行testCustomService()方法,查看结果
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/587365.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一款射频芯片的layout设计指导案例-篇章1

RTL8762C是瑞昱一款超低功耗蓝牙芯片&#xff0c;瑞昱的硬件设计指导书中&#xff0c;关于该芯片的layout设计指导很有普适性的参考指导意义&#xff0c;如下为笔者做过一定简化的芯片最小系统原理图—— PCB Layout建议分如下几个点—— 元件布局顺序 按如下顺序布置元件&…

可视化搭建 - 场景实战

接下来用实战来说明该可视化搭建框架是否好用&#xff0c;以下几条原则需要始终贯穿在下面每个实战场景中&#xff1a; 复杂的业务场景&#xff0c;背后使用的框架 API 是简单的。底层 API 并不为业务场景特殊编写&#xff0c;而是具有很强的抽象性&#xff0c;很容易挖掘出其他…

23种设计模式之状态模式(State Pattern)

前言&#xff1a;大家好&#xff0c;我是小威&#xff0c;24届毕业生&#xff0c;在一家满意的公司实习。本篇文章将23种设计模式中的状态模式&#xff0c;此篇文章为一天学习一个设计模式系列文章&#xff0c;后面会分享其他模式知识。 如果文章有什么需要改进的地方还请大佬不…

Zabbix API开发实战,创建报警媒介和代码示例(付源码)

Zabbix API开始发挥重要作用&#xff0c;尤其是在Zabbix与第三方软件&#xff08;如配置和事件管理系统&#xff09;的集成以及日常任务的自动化方面。如果没有一些自动化&#xff0c;管理对数千台主机的监控是非常困难的。 API是在Zabbix 1.8中引入的&#xff0c;并且已经被广…

多语言电商系统_国际化电商系统流程

跨境电商系统是基于计算机技术和互联网平台的一种电子商务系统。它通常包括前端电商网站或应用程序、后台管理系统、物流管理系统、支付系统等多个模块&#xff0c;可以通过网络实现商品展示、订单管理、支付结算、物流配送等电商流程的自动化处理。 跨境电商系统基本流程包括…

JWT | 一分钟掌握JWT | 概念及实例

作者&#xff1a;Mars酱 声明&#xff1a;本文章由Mars酱编写&#xff0c;部分内容来源于网络&#xff0c;如有疑问请联系本人。 转载&#xff1a;欢迎转载&#xff0c;转载前先请联系我&#xff01; 什么是JWT JWT的全称是Json Web Token。是基于RFC 7519开放标准的&#xff…

玩转ChatGPT:视频制作

一、写在前面 最近&#xff0c;在码深度学习图像识别的相关知识和代码&#xff0c;这一part&#xff0c;看看能否用小Chat搞一个介绍视频。 简单问小Chat&#xff1a; 咒语&#xff1a;我怎么使用你做一个视频&#xff1f;需要配合什么软件生成&#xff1f;&#xff1f; 大意…

2023.5.22-5.28 AI行业周刊(第149期):毕业10年后的实验室聚会

周末和实验室&#xff0c;无锡这边师兄弟们相聚了一次&#xff0c;之前在无锡这边的江南大学读书&#xff0c;后来工作后大家大多数也都留在了无锡。 我们研究生时的实验室&#xff0c;专门有一个微信群&#xff0c;从02年入学&#xff0c;到17年入学&#xff0c;多年各界的师…

Node.JS学习 | Babel | webpack | ES6

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; Node.JS Node.JS能够在服务器端运行JavaScript的开放源代码、跨平台运行环境&#xff1b;Node.js采用Google开发的V8运行代码&#xff0c;使用事件驱动、非阻塞IO和异…

Python常用数据结构

Python 提供了多种内置的数据结构&#xff0c;用于存储和组织数据。以下是一些常见的 Python 数据结构&#xff1a; 1.列表&#xff08;List&#xff09;&#xff1a;列表是一个有序、可变的数据集合&#xff0c;可以包含任意类型的元素。列表使用方括号 [] 表示&#xff0c;元…

谷歌周彦祺:LLM浪潮中的女性科学家多面手丨智源大会嘉宾风采

导读 大模型研发竞赛如火如荼&#xff0c;谷歌紧随OpenAI其后推出PalM2、Gemini等系列模型。Scaling Law是否仍然适用于当下的大模型发展&#xff1f;科技巨头与初创企业在竞争中各有哪些优势和劣势&#xff1f;模型研究者应秉持哪些社会责任&#xff1f; 2023智源大会「基础模…

华为OD机试真题B卷 Java 实现【最长的连续子序列】,附详细解题思路

一、题目描述 有N个正整数组成的一个序列,给定一个整数sum,求长度最长的的连续子序列使他们的和等于sum,返回该子序列的长度,如果没有满足要求的序列返回-1。 二、输入描述 第1行有N个正整数组成的一个序列。 第2行给定一个整数sum。 求最长连续子序列,只要遍历计算连…

补贴平价好书影响上亿读者:有一种力量叫“至拙”

通过一种“至拙”的力量&#xff0c;“多多读书月”带来诸多可喜的变化。 全民拼书&#xff1a;“多多读书月”带来平价好书 如果你也是一位热爱读书的小伙伴&#xff0c;那么想来一定不会不知道“多多读书月”。 2020年&#xff0c;在“三区三州”地区助力脱贫攻坚的公益活动中…

转转前端周刊第六十七期

转转前端周刊 本刊意在将整理业界精华文章给大家&#xff0c;期望大家一起打开视野 如果你有发现一些精华文章想和更多人分享&#xff0c;可以点击我们的公众号名称&#xff0c;将文章链接和你的解读文案发给我们&#xff01;我们会对内容进行筛选和审核&#xff0c;保留你的推…

详细理解GPT2模型结构及其训练过程—GPT系列训练与部署

本文为博主原创文章&#xff0c;未经博主允许不得转载。 本文为专栏《Python从零开始进行AIGC大模型训练与推理》系列文章&#xff0c;地址为“https://blog.csdn.net/suiyingy/article/details/130169592”。 GPT2模型环境搭建与调试请参考博文《GPT系列训练与部署—GPT2环境配…

一分钟学一个 Linux 命令 - ls

前言 大家好&#xff0c;我是 god23bin。今天我给大家带来的是 Linux 命令系列&#xff0c;每天只需一分钟&#xff0c;记住一个 Linux 命令不成问题。今天&#xff0c;我们要介绍的是一个常用而又强大的命令&#xff1a;ls&#xff08;list&#xff09;。 什么是 ls 命令&am…

CVPR 2023 | 去雨去噪去模糊,图像low-level任务,视觉AIGC系列

Learning A Sparse Transformer Network for Effective Image Deraining 基于Transformer的方法在图像去雨任务中取得了显著的性能&#xff0c;因为它们可以对重要的非局部信息进行建模&#xff0c;这对高质量的图像重建至关重要。本文发现大多数现有的Transformer通常使用查询…

Linux的进程信号(下)

文章目录 1. 阻塞信号1.1 信号其他相关常见概念1.2 在内核中的表示 2. sigset_t3. 信号集操作函数3.1 sigprocmask3.2 sigpending3.3. 实例演示 4. 信号的处理4.1. sigaction4.2 多个信号的处理 5. 可重入函数6. volatile7. SIGCHLD信号 1. 阻塞信号 1.1 信号其他相关常见概念…

java基于springboot自来水收费缴费系统+jsp

本次设计拟采用JAVA技术&#xff0c;对乡镇自来水收费系统的功能需求进行了全面分析&#xff0c;从模块功能定义、前后端交互技术、数据库及编程语言的选择、系统调试及测试、功能完善和改进等方面进行设计&#xff0c;解决了从用户新装、抄表、计费、收费、复查、换表、发票管…

Pyside6-第三篇-QToolButton一个奇葩的按钮

今天是Pyside6的第三篇内容。一起来看另一个按钮。 QToolButton。 from PySide6.QtWidgets import QToolButton, QWidget, QApplicationapp QApplication([])win QWidget() win.setWindowTitle("QToolButton按钮")btn QToolButton(win) btn.setText("触发&qu…