春季4.3.12
我正在使用@Configuration类来延迟初始化bean
@Configuration
public class Configuration {
@Bean
@Lazy
public Config config(){
propertySourceInjector().injectToEnvironment();
return new Config();
}
@Bean
public PropertySourceInjector propertySourceInjector(){
return new PropertySourceInjector ();
}
}
配置类:
public class Config{
@Autowired
private Environment environment;
@Value("${customConfigValue}")
public Integer configValue;
public Integer getConfigValue() {
return configValue;
}
}
PropertySourceInjector类:
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公共字段时,注入永远不会发生。 bean未初始化。
@Autowired @Lazy
Config config;
System.out.println(Config.configValue) //Fails. Prints null
为什么?
答案 0 :(得分:3)
Config.configValue
是对某个字段的直接访问。
Lazy代理对直接访问没有任何作用,因此没有任何东西可以触发bean加载。
将configValue
设为私有字段并使用getter。