Класс Spring @Configuration должен быть подключен автоматически - PullRequest
2 голосов
/ 18 ноября 2011

Я создал аннотированный класс Spring @Configuration и хочу автоматически подключить к нему ResourceLoader, чтобы я мог использовать его в одном из методов @Bean для поиска файла, заданного строкой.Когда я запускаю приложение и инициализирую контекст, я получаю NPE, обращающийся к полю autowired, и в режиме отладки он отображается как ноль / не установлен.Я ошибаюсь, ожидая присутствия resourceLoader?Неправильно ли я утверждаю, что автоматическое подключение компонента конфигурации происходит до вызова его методов?Конфигурация xml, загружающая этот компонент, помечена

@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;
   }
}

1 Ответ

5 голосов
/ 18 ноября 2011

Я не уверен, является ли это ошибкой или ожидаемым поведением. Иногда это работало для меня, иногда нет. Во всяком случае, есть другой способ достижения того, что вы хотите:

public @Bean PropertiesFactoryBean appProperties(ResourceLoader resourceLoader) {
    // resourceLoader is injected correctly
    ...
}
...