有一个简单的@Configuration类:
@Data //setters and getters
@ComponentScan
@Configuration
@ConfigurationProperties(prefix = "some.prefix")
public class SomeAutoConfig {
public SomeAutoConfig(Map<String, Pojo> properties) {
this.properties= properties;
}
private final Map<String, Pojo> properties;
@Bean
String string() {
return "test string";
}
}
在调试时,我在构造函数上设置了断点。属性=属性)和@Bean方法(返回"测试字符串")。
我没有看到属性作为构造函数参数,但在@Bean方法中有可见的。
为什么只有看到属性?是我注入这个bean更好的好方法,也可以从构造函数访问?
这是因为Spring在构造函数执行和调用@Bean
注释方法之间通过setter初始化该字段。我知道,没有直接的方法可以通过构造函数来做到这一点,你可以使用@Value("#{${some.prefix}}")
,但这需要特别定义属性,即{key1:'value1',key2:'value2',....}
编辑:从Springboot 2.2开始,您可以利用@ConstructorBinding
注释。