【发布时间】:2019-05-09 09:07:02
【问题描述】:
我参考了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;
}
}
上面给出的代码有效。当“pairMap”设置为静态时,不会从 application.yml 文件中读取映射,如下所示。
@Component
@Configuration
@ConfigurationProperties("easy.app")
@EnableConfigurationProperties
public class TestProperties {
private static Map<String, String> pairMap= new HashMap<String, String>();
public static void setPairMap(Map<String, String> pairMap) {
TestProperties .pairMap= pairMap;
}
}
PS:问题仅在注入 map 时出现,而不是在注入字符串时出现。为什么会出现这种行为?
即以下配置中的字符串注入有效,但映射注入无效
easy.app.key1: 'abc'
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>();
private static String key1;
public static void setPairMap(Map<String, String> pairMap) {
this.pairMap= pairMap;
}
public static void setKey1(String key1) {
TestProperties.key1= key1;
}
public String getKey1(){
return key1;
}
【问题讨论】:
-
@autowired in static classes 的可能重复项。我认为该线程会为您指明方向。
-
如果我删除@Component 标签会怎样?
-
为什么要把它设为静态@Abhi
-
myclass中包括map在内的一些字段需要是静态的,其他的需要是非静态的
标签: java spring spring-boot