使用@PropertySource 访问@Lazy 初始化的@Bean 的public 属性
Accessing public property of a @Lazy initialized @Bean with @PropertySource
Spring 4.3.12
我正在使用 @Configuration classes 来延迟初始化一个 bean
@Configuration
public class Configuration {
@Bean
@Lazy
public Config config(){
propertySourceInjector().injectToEnvironment();
return new Config();
}
@Bean
public PropertySourceInjector propertySourceInjector(){
return new PropertySourceInjector ();
}
}
配置class:
public class Config{
@Autowired
private Environment environment;
@Value("${customConfigValue}")
public Integer configValue;
public Integer getConfigValue() {
return configValue;
}
}
PropertySourceInjector class:
public class PropertySourceInjector {
public void injectToEnvironment(){
//reads DB and adds a property source to Spring Enviroment's property sources
}
}
当我访问 Config.getValue() 方法时,注入正确进行。添加了 PropertySource,@Value 将正确的值分配给字段 configValue
.
@Autowired @Lazy
Config config;
System.out.println(Config.getConfigValue()); //works!!
当我访问 Config.value public 字段时,注入从未发生。该 bean 未初始化。
@Autowired @Lazy
Config config;
System.out.println(Config.configValue) //Fails. Prints null
为什么?
Config.configValue
是直接访问一个字段。
Lazy 代理对直接访问不执行任何操作,因此不会触发 bean 加载。
将 configValue
设为私有字段并使用 getter.
Spring 4.3.12
我正在使用 @Configuration classes 来延迟初始化一个 bean
@Configuration
public class Configuration {
@Bean
@Lazy
public Config config(){
propertySourceInjector().injectToEnvironment();
return new Config();
}
@Bean
public PropertySourceInjector propertySourceInjector(){
return new PropertySourceInjector ();
}
}
配置class:
public class Config{
@Autowired
private Environment environment;
@Value("${customConfigValue}")
public Integer configValue;
public Integer getConfigValue() {
return configValue;
}
}
PropertySourceInjector class:
public class PropertySourceInjector {
public void injectToEnvironment(){
//reads DB and adds a property source to Spring Enviroment's property sources
}
}
当我访问 Config.getValue() 方法时,注入正确进行。添加了 PropertySource,@Value 将正确的值分配给字段 configValue
.
@Autowired @Lazy
Config config;
System.out.println(Config.getConfigValue()); //works!!
当我访问 Config.value public 字段时,注入从未发生。该 bean 未初始化。
@Autowired @Lazy
Config config;
System.out.println(Config.configValue) //Fails. Prints null
为什么?
Config.configValue
是直接访问一个字段。
Lazy 代理对直接访问不执行任何操作,因此不会触发 bean 加载。
将 configValue
设为私有字段并使用 getter.