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 idea配置自动部署

springboot idea配置自动部署

SpringBoot项目优雅的实现多配置文件切换以及获取配置信息

SpringBoot项目优雅的实现多配置文件切换以及获取配置信息

SpringBoot项目优雅的实现多配置文件切换以及获取配置信息

SpringBoot项目优雅的实现多配置文件切换以及获取配置信息