@Value注解
以前配置文件注入都是用String接收的,面试的时候才知道可以用集合类接收
注入Set/List
yaml文件:
set:
config: 1,2,3,4
spring注入:
@Value("#{'${set.config}'.split(',')}")
Set<Integer> setConfig;
注入Map
yaml文件:
map:
config: "{aa: 'AA', bb: 'BB'}"
spring注入:
@Value("#{${map.config}}")
Map<String, Object> mapConfig;
@ConfigurationProperties
比如说项目中有大量需要注入的配置文件,用这个注解就可以更好的分类,但格式与@Value不同
yaml文件
aaa:
bbb:
list:
- xxx
- yyy
- zzz
map:
key1: 'value1'
key2: 'value2'
配置类
@Component
@ConfigurationProperties(prefix = "aaa.bbb")
@Data
public class PropertiesEntity {
private List<String> list;
private Map<String, Object> map;
}
此时PropertiesEntity这个类已被spring容器管理,用@Autowired注入即可
@Autowired
PropertiesEntity properties;
测试:
@RestController
public class TestController {
@Autowired
PropertiesEntity properties;
@Value("#{'${set.config}'.split(',')}")
Set<Integer> setConfig;
@Value("#{${map.config}}")
Map<String, Object> mapConfig;
@RequestMapping(value = "/test/properties", method = RequestMethod.POST)
public Object propertiesTest () {
System.out.println("打印ConfigurationProperties注解的类" + properties);
System.out.println("打印@Value注入的set集合" + setConfig);
System.out.println("打印@Value注入的map集合" + mapConfig);
return "测试";
}
}
结果:
打印ConfigurationProperties注解的类PropertiesEntity(list=[xxx, yyy, zzz], map={key1=value1, key2=value2})
打印@Value注入的set集合[1, 2, 3, 4]
打印@Value注入的map集合{aa=AA, bb=BB}
网友评论