Spring 配置文件字段注入到List、Map
#代码知识 发布时间: 2026-01-12
今天给大家分享冷门但是有很实小知识,Spring 配置文件注入list、map、字节流。

list 注入
properties文件
user.id=3242,2323,1
使用spring el表达式
@Value("#{'${user.id}'.split(',')}")
private List list;
yaml 文件
在yml配置文件配置数组方式
number: arrays: - One - Two - Three
@Value("${number.arrays}")
private List list
虽然网上都说,这样可以注入,我亲身实践过了,肯定是不能的。会抛出 Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'number.arrays' in value "${number.arrays}"异常。要想注入必须要使用
@ConfigurationProperties
@ConfigurationProperties(prefix = "number")
public class AgentController {
private List arrays;
public List getArrays() {
return arrays;
}
public void setArrays(List arrays) {
this.arrays = arrays;
}
@GetMapping("/s")
public List lists(){
return arrays;
}
不是想这么麻烦,可以像properties文件写法,使用el表达式即可
number: arrays: One,Two,Three
@Value("#{'${number.arrays}'.split(',')}")
private List arrays;
注入文件流
@Value("classpath: application.yml")
private Resource resource;
// 占位符
@Value("${file.name}")
private Resource resource2;
@GetMapping("/s")
public String lists() throws IOException {
return IOUtils.toString(resource.getInputStream(),"UTF-8");
}
从类路径加载application.yml文件将文件注入到org.springframework.core.io.Resource ,可以使用getInputStream()方法获取流。比起使用类加载器获取路径再去加载文件的方式,优雅、简单不少。
Map Key Value 注入
properties
resource.code.mapper={x86:"hostIp"}
@Value("#{${resource.code.mapper}}")
private Map<String, String> mapper;
成功注入
yaml
在yaml文件中,使用@Value不能注入Map 实例的,要借助@ConfigurationProperties 才能实现。
@ConfigurationProperties(prefix = "blog")
public class AgentController {
private Map website;
public Map getWebsite() {
return website;
}
public void setWebsite(Map website) {
this.website = website;
}
@GetMapping("/s")
public String lists() throws IOException {
return JsonUtil.toJsonString(website);
}
配置文件
blog: website: juejin: https://juejin.im jianshu: https://jianshu.com sifou: https://segmentfault.com/
可以看出@ConfigurationProperties注入功能远比@Value强,不仅能注入List、Map这些,还能注入对象属性,静态内部类属性,这个在Spring Boot Redis模块 org.springframework.boot.autoconfigure.data.redis.RedisProperties体现出来。
区别
| 区别 | @ConfigurationProperties | @Value |
|---|---|---|
| 类型 | 各种复制类型属性Map、内部类 | 只支持简单属性 |
| spEl表达式 | 不支持 | 支持 |
| JSR303数据校验 | 支持 | 不支持 |
| 功能 | 一个列属性批量注入 | 单属性注入 |
上一篇 : 浅谈Java开发中的安全编码问题
下一篇 : 解决Spring Cloud Feign 请求时附带请求头的问题
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!