SpringBoot属性注入
- 1、通过application.yml和@Value进行注入
- 2、通过ConfigurationProperties在实体类上注解注入属性值
- 3、设置application.yml配置文件中的提示
- 4、application.yml里面可以设置占位符
- 4.1、可以引用其它属性
- 4.2、使用随机数
- 5、配合ConfigurationProperties注解实现jsr-303数据校验
- 6、@ConfigurationProperties注解和@Value的区别
- 7、指定外部的properties文件为属性注入的文件
1、通过application.yml和@Value进行注入
实体类
package cool.ale.beans;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @author dujlc
*/
@Component
public class User {
@Value("${user.userName}")
private String userName;
private Integer age;
private Date birthday;
private List<String> hobbies;
private Map<Integer,String> girlFriend;
}
application.yml
user:
userName: XiaoLeLe
age: 18
birthday: 2021/06/30
# 两种写法,写一种即可
hobbies: [唱歌,跳舞]
# - 唱歌
# - 跳舞
girl-friend: {18: 小红, 20: 小兰}
address:
id: 1
desc: asdksamsdka
# 18 : 小红
# 20 : 小兰
测试类
package cool.ale.springboot_inject;
import cool.ale.beans.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SpringbootInjectApplicationTests {
@Autowired
private User user;
@Test
void contextLoads() {
System.out.println(user);
}
}
运行截图
2、通过ConfigurationProperties在实体类上注解注入属性值
参考1,其它东西不用变,我们只需要将实体类的代码变成如下模样:
实体类
package cool.ale.beans;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @author dujlc
*/
@Component
// prefix指定的配置文件中对象的子节点将会自动匹配
@ConfigurationProperties(prefix = "user")
public class User {
private String userName;
private Integer age;
private Date birthday;
private List<String> hobbies;
private Map<Integer,String> girlFriend;
}
注:这里需要注意一点,我们的配置文件当使用了ConfigurationProperties注解后,支持以下四种的松散匹配
user:
userName: XiaoLeLe
user:
user-name: XiaoLeLe
user:
user_name: XiaoLeLe
user:
USERNAME: XiaoLeLe
3、设置application.yml配置文件中的提示
当我们想设置我们的配置文件有提示功能(前提是我们必须要和ConfigurationProperties注解配合),我们可以按照以下两个步骤做:
1、引入jar包
<!-- 会生成 META-INF 元数据 用于提供 idea 自动提示配置文件的 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<!-- 设置当别的项目依赖到这个项目的时候,这个jar包不会传播 -->
<optional>true</optional>
</dependency>
2、设置idea的属性
4、application.yml里面可以设置占位符
4.1、可以引用其它属性
4.2、使用随机数
5、配合ConfigurationProperties注解实现jsr-303数据校验
1、先导入数据校验的包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2、在被ConfigurationProperties注解的类上加上注解@Validated,并在需要校验的属性上加上需要的校验,但是注意一定要导入javax包下面的校验
@Component
@ConfigurationProperties(prefix = "user")
@Validated
public class User {
@NotEmpty
private String userName;
private Integer age;
private Date birthday;
private List<String> hobbies;
private Map<Integer,String> girlFriend;
}
当运行程序之后,控制台则会打印:
6、@ConfigurationProperties注解和@Value的区别
@ConfigurationProperties | @Value | |
绑定 | 批量绑定配置文件中的属性 | 一个个指定 |
松散绑定 | 支持 | 支持部分,比如下划线就不支持 |
SPEL表达式 | 不支持 | 支持 |
自动提示 | 支持 | 不支持 |
JSR303 | 支持 | 支持 |
7、指定外部的properties文件为属性注入的文件
首先yml文件是不支持@PropertySource注解指定的。
1、在类上面写上指定的文件
@Component
@ConfigurationProperties(prefix = "user")
@Validated
@PropertySource("classpath:user.properties")
public class User {
@NotEmpty
private String userName;
private Integer age;
private Date birthday;
private List<String> hobbies;
private Map<Integer,String> girlFriend;
}
2、写配置的文件
user.userName=kkkk
配置文件位置截图: