Lecture08-容器-[实验06]读取外部properties文件中的属性值

文章目录

    [toc]

    单词词性音标含义
    Configurationn./kənˌfɪɡəˈreɪʃn/配置(编程中指系统或组件的参数设置,Spring中常用@Configuration注解标识“配置类”,用于定义Bean、依赖关系等核心配置,替代传统XML配置文件)
    classpathn./klɑːs pɑːθ/类路径(Java项目中用于存放编译后class文件、配置文件(如.properties)、资源文件(如图片)的路径,Spring默认从classpath加载配置文件,例如classpath:application.properties表示读取类路径下的应用配置文件)
    Propertyn./ˈprɒpəti/属性;配置项(指键值对形式的配置参数,如application.properties中的server.port=8080,server.port是Property的“键”,8080是“值”,Spring可通过@Value或@ConfigurationProperties注解读取这些Property)
    Sourcen./sɔːs/来源;源码(编程中可指“配置来源”“源码文件”:在配置场景中,PropertySource表示配置的来源(如classpath下的文件、环境变量);在编译场景中,source常指Java源码版本(如Maven的maven.compiler.source=17指定源码遵循Java 17语法))
    SpELn./ˌes piː iː ˈel/Spring Expression Language
    Spring表达式语言

    Lecture08-容器-[实验06]读取外部properties文件中的属性值

    一、提出问题

    *.properties通常称之为:属性文件、资源文件

    在实际开发中,有些数据我们不希望在Java代码写死,同时也不适合保存到数据库中

    所以会抽取到properties文件中,统一管理

    atguigu.happy.message=good_morning
    

    那么Java程序如何读取这个值?


    二、代码实现

    1、创建外部属性文件

    image-20250523162555527

    atguigu.happy.message=good_morning
    

    2、创建配置类

    image-20250523161917916

    @Configuration
    public class Demo11Config {
    }
    

    image-20250523161716810

    查看@Configuration注解源码发现,其实@Configuration注解也是@Component注解的变种

    所以类标记了@Configuration注解之后,这个类就会放入Ioc容器

    同时@Configuration注解表示这个类是一个配置类,所以还可以编写一些配置信息


    3、引入外部属性文件

    @Configuration
    @PropertySource("classpath:atguigu.properties")
    public class Demo11Config {
    }
    

    classpath:表示从类路径的根目录开始查找资源

    类路径:

    • 普通Java Maven工程:target/classes
    • Web Maven工程:WEB-INF/classes

    classpath*:表示不仅从当前工程的类路径,而且从所有引入的jar包的类路径查找资源


    4、读取属性文件中的值

    image-20250523163023046

    @Controller
    public class DogController {
    
        @Value("${atguigu.happy.message}")
        private String message;
    
        public void doSth() {
            System.out.println("message = " + message);
        }
    }
    

    然后在主启动类中获取DogController的bean,再调用doSth()方法:

    		DogController dogController = ioc.getBean(DogController.class);
    		dogController.doSth();
    

    5、补充

    • application.properties是SpringBoot应用的主配置文件,它里面的属性可以直接读取,不需要指定主配置文件的位置,因为这个位置是默认的
    • 每个properties文件都可以定义多个属性
    • @Value注解中的${xxx}是SpEL语法,SpEL是Spring中的表达式语言
    @Controller
    public class DogController {
    
        @Value("${atguigu.happy.message}")
        private String message;
    
        @Value("${atguigu.good.info}")
        private String info;
    
        @Value("${spring.application.name}")
        private String appName;
    
        public void doSth() {
            System.out.println("message = " + message);
            System.out.println("info = " + info);
            System.out.println("appName = " + appName);
        }
    }
    
    end