[toc]
| 单词 | 词性 | 音标 | 含义 |
|---|---|---|---|
| Configuration | n. | /kənˌfɪɡəˈreɪʃn/ | 配置(编程中指系统或组件的参数设置,Spring中常用@Configuration注解标识“配置类”,用于定义Bean、依赖关系等核心配置,替代传统XML配置文件) |
| classpath | n. | /klɑːs pɑːθ/ | 类路径(Java项目中用于存放编译后class文件、配置文件(如.properties)、资源文件(如图片)的路径,Spring默认从classpath加载配置文件,例如classpath:application.properties表示读取类路径下的应用配置文件) |
| Property | n. | /ˈprɒpəti/ | 属性;配置项(指键值对形式的配置参数,如application.properties中的server.port=8080,server.port是Property的“键”,8080是“值”,Spring可通过@Value或@ConfigurationProperties注解读取这些Property) |
| Source | n. | /sɔːs/ | 来源;源码(编程中可指“配置来源”“源码文件”:在配置场景中,PropertySource表示配置的来源(如classpath下的文件、环境变量);在编译场景中,source常指Java源码版本(如Maven的maven.compiler.source=17指定源码遵循Java 17语法)) |
| SpEL | n. | /ˌes piː iː ˈel/ | Spring Expression Language Spring表达式语言 |
Lecture08-容器-[实验06]读取外部properties文件中的属性值
一、提出问题
*.properties通常称之为:属性文件、资源文件
在实际开发中,有些数据我们不希望在Java代码写死,同时也不适合保存到数据库中
所以会抽取到properties文件中,统一管理
atguigu.happy.message=good_morning
那么Java程序如何读取这个值?
二、代码实现
1、创建外部属性文件

atguigu.happy.message=good_morning
2、创建配置类

@Configuration
public class Demo11Config {
}

查看@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、读取属性文件中的值

@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);
}
}