先说一下注入的Spring环境。
1、@Value注解不需要 set方法
2、@ConfigurationProperties 需要set方法要不然注入不进来(特别说明一下)
@EnableConfigurationProperties注解的作用是:使 @ConfigurationProperties 注解的类生效(如果一个配置类只配置@ConfigurationProperties注解,而没有使用@Component或@Configuration,那么容器中是获取不到properties 配置文件转化的bean。 @EnableConfigurationProperties 相当于把使用 @ConfigurationProperties 的类进行了一次注入)
一、注入List或[ ]数组
1、注入固定值
//注入固定值
@Value("${value:1,2,3}")
private List<String>value1;
//注入固定值
@Value("${value:1,2,3}")
private List<String>value2;
2、注入配置文件的值
@Value("${value}")
private List<String>value3;
//下面为配置文件的内容
写法一:
value: 1,2,3
写法二(这种写法对有复杂参数时很方便:推荐):
value:
- 1
- 2
- 3
3、注入配置文件中的List参数
@Value("${users}")
private List<User> value4;
配置文件写法为:
value:
- 0:
username: 张三
password: xxx
- 1:
username: 李四
password: xxx
4、表达式注入
@Value("#{'${username:张三|李四|王五}'.split('|')}")
5、注入默认值
//注入默认值:
// 如果配置文件的connectionTimeOut有值直接使用,如果没有值,则使用默认值:3000
@Value("${connectionTimeOut:3000}")
private Integer connectionTimeOut;
二、通过上面的规律,聪明的你可以使用强大的Spring很容易就注入其他类型
如Map、Set
@Value("${users}")
private Map<User> value5;
以下为配置文件内容写法一:(推荐)
users:
张三:
username: 张三
password: xxx
李四:
username: 李四
password: xxx
写法二:
users:{张三:{username:张三,password:xxx},李四:{username:张三,password:xxx}}
上以注入的结果是会得到一个map:{张三:{username:张三,password:xxx},李四:{username:张三,password:xxx}}
(是不是很强大)
三:注入Bean
@Value(value = "#{user}")
private User value6;
四:简易写法:
1、使用@ConfigurationProperties
@Configuration
@ConfigurationProperties(prefix = "")
public class ContextConfig {
private Integer timeOut;
}
可以自动匹配配置文件中的同名参数:如
utils:
param: #以下两种写法都以自动匹配到上面的参数中。YYDS
time-out:3000
timeOut: 3000
喜欢的话,点赞。回见