Springboot - 从 application.yml 注入取决于方法名称
Posted
技术标签:
【中文标题】Springboot - 从 application.yml 注入取决于方法名称【英文标题】:Springboot - injection from application.yml depending method name 【发布时间】:2019-05-12 14:00:24 【问题描述】:我参考了Spring Boot - inject map from application.yml 从 application.yml 文件中注入地图
我的application.yml sn-p在下面
easy.app.pairMap:
test1: 'value1'
test2: 'value2'
属性文件如下所示
@Component
@Configuration
@ConfigurationProperties("easy.app")
@EnableConfigurationProperties
public class TestProperties
private Map<String, String> pairMap= new HashMap<String, String>();
public void setPairMap(Map<String, String> pairMap)
this.pairMap= pairMap;
但是,我发现只有当 setter 和 getter 的格式正确时才会发生值注入。即 getPairMap 和 setPairMap。不是在使用 getPairs 或 SetPairs 时。这种行为的原因是什么
【问题讨论】:
【参考方案1】:Spring 获取您的属性全名easy.app.pairMap
通过前缀easy.app
查找ConfigurationProperties
,然后尝试查找名称为setPairMap
的setter,它获取属性名称pairMap
并将其“转换”为setPairMap
.
如果您创建方法setPairs
,属性名称应该类似于easy.app.pairs
。
【讨论】:
【参考方案2】:要使用 Spring Boot 的 Binder
实用程序(这是 @ConfigurationProperties
所做的)绑定到属性,您需要在目标 bean 中有一个属性,并且您需要提供一个 setter 或用一个可变值初始化它.
Spring如何理解它需要使用SetPairs
方法来设置你的pairMap
属性? getter 和 setter 的命名有约定,如果您希望一切正常,则应遵循此约定。
【讨论】:
以上是关于Springboot - 从 application.yml 注入取决于方法名称的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot项目优雅的实现多配置文件切换以及获取配置信息
SpringBoot项目优雅的实现多配置文件切换以及获取配置信息