spring boot-5.配置文件注入
配置文件注入这一部分内容主要有以下几点内容:
1.全局配置文件值注入
2.自定义配置文件值注入
3.自定义的Spring 配置文件生效
(1)首先介绍全局配置文件的值注入,全局配置文件值注入有两种方式,第一种是使用@ConfigurationProperties注解,另外一种是使用@Value注解,这两个注解默认是从全局配置文件(application.yml/properties)中获取属性的值。
@ConfigurationProperties用法如下,它会将前缀为指定值的属性的值赋给Bean中相应的字段,但是必须注意的是这个Bean必须是容器中的一个组件。这个注解不光可以用在类上面也可以配合@Bean用在方法上,还可以和@EnableConfigurationProperties 搭配使用,具体可以参照:https://blog.csdn.net/andy_zhang2007/article/details/78761651 这篇文章,有详细的介绍。总之,@ConfigurationProperties可以为容器中的组件的属性注入值。
package com.springboot.entity; import java.util.Date;
import java.util.List;
import java.util.Map; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; @Component
@ConfigurationProperties(prefix="person")
public class Person {
private String lastName;
private Integer age;
private boolean boss;
private Date birth;
private Map<String, Object> maps;
private List<Object> lists;
private dog dog;
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public boolean isBoss() {
return boss;
}
public void setBoss(boolean boss) {
this.boss = boss;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public Map<String, Object> getMaps() {
return maps;
}
public void setMaps(Map<String, Object> maps) {
this.maps = maps;
}
public List<Object> getLists() {
return lists;
}
public void setLists(List<Object> lists) {
this.lists = lists;
}
public dog getDog() {
return dog;
}
public void setDog(dog dog) {
this.dog = dog;
}
public String toString() {
return "Person{" +
"lastName='" + lastName + '\'' +
", age=" + age +
", boss=" + boss +
", birth=" + birth +
", maps=" + maps +
", lists=" + lists +
", dog=" + dog +
'}';
} }
@Value 注解的使用方法如下,它会将配置文件中的值赋给被添加注解的变量。
@Value("${person.lastName}")
private String Name;
这两种方法的区别是:
如果只需要获取少量的配置文件值,可以使用@Value注解,如果要整个注入JavaBean的值,那就使用@ConfigurationProperties注解一次性给所有Bean的属性赋值。
(2)自定义配置文件值的注入
如果想要将与系统配置无关的一直业务配置从全局配置文件中剥离出来,单独作为一个配置文件,那就可以使用@PropertySource注解,它可以将自定义的配置文件的属性值注入到JavaBean的属性中
@PropertySource(value = {"classpath:person.properties"})
public class Person {
@Value("${person.name}")
private String lastName;
上面的示例指定了自定义的配置文件的位置是类路径下的person.properties 文件,并且将改文件的person.name 赋给 lastName;但是这里有一点需要特别注意,由于@ConfigurationProperties支持松散语法,如果项目中同时存在@ConfigurationProperties和@PropertySource两种注入方式,且自定义的配置文件和全局配置文件中的属性符合松散绑定规则,那将取全局配置文件的属性。如全局配置文件中有last-name 和lastName 是一样的。
上面几种方式给JavaBean注入值的时候还支持校验,官方文档的24.7.5章节有介绍,具体做法是在JavaBean是使用@Validated注解开启校验,并在Bean的属性上注意添加@NotNull,@Email 等JSR303校验规则。
(3)将自定义的spring 配置文件注入
如果我们希望将自己定义的另外一些组件添加到容器中,可以有两种方式。
一种是使用@Configuration 类标记为配置类,在配置类中使用@Bean注解声明我们的组件,并在主程序类将配置类通过@Import({ MyConfig.class, MyAnotherConfig.class })注入到容器中方式实现。
第二种就是编写一个spring的配置文件,在主程序类中通过@ImportResource(locations = {"classpath:beans.xml"})将自己定义的配置文件中的组件注入到容器中。(beans.xml即为我们自定义的配置文件。)
最新文章
- 《连载 | 物联网框架ServerSuperIO教程》- 6.并发通讯模式开发及注意事项
- js获取ModelAndView值的问题
- HDU 5884 Sort -2016 ICPC 青岛赛区网络赛
- /var文件系统
- UML图示
- C语言内存对齐(2)
- 深度讲解 .net session 过期机制
- route 工具
- 虚拟机vmnet0、vmnet1和vmnet8的区别
- 七. Python基础(7)--文件的读写
- MLE、MAP、贝叶斯三种估计框架
- Dapper Extensions中修改Dialect
- 微服务深入浅出(7)-- 网关路由Zuul
- Kail Linux渗透测试教程之ARP侦查Netdiscover端口扫描Zenmap与黑暗搜索引擎Shodan
- Mysql EXPLAIN列的解释
- 0xffff0000颜色表示
- gdkoi前的复习
- jmeter对响应结果做正则、json、xpath结果测试
- 对事务的特性ACID的理解
- react-native 项目实战 -- 新闻客户端(5) -- 完善首页列表数据