我已经创建了一个Spring @Configuration注释类,我想要将一个ResourceLoader自动装配到它,以便我可以在其中一个@Bean方法中使用它来查找由String给出的文件。当我运行应用程序并初始化上下文时,我得到一个访问自动装配字段的NPE,并且在调试模式下,它显示为空/未设置。我错在期待resourceLoader存在吗?我错误地断言配置bean的自动装配发生在其方法被调用之前?加载此bean的xml配置标记为< context:annotation-config />
@Configuration
public class ClientConfig {
@Autowired
private ResourceLoader resourceLoader;
public @Bean
String configHome() {
return System.getProperty("CONFIG_HOME");
}
public @Bean
PropertiesFactoryBean appProperties() {
String location = "file:" + configHome() + "/conf/webservice.properties";
PropertiesFactoryBean factoryBean = new PropertiesFactoryBean();
factoryBean.setLocation(resourceLoader.getResource(location));
return factoryBean;
}
}
答案 0 :(得分:5)
我不确定这是一个错误还是预期的行为。有时它对我有用,有时却没有。无论如何,还有另一种方法可以达到你想要的效果:
public @Bean PropertiesFactoryBean appProperties(ResourceLoader resourceLoader) {
// resourceLoader is injected correctly
...
}