2011-11-18 63 views
2

我創建了一個Spring @Configuration註釋類,我想爲它自動裝載一個ResourceLoader,以便我可以在一個@Bean方法中使用它來查找由串。當我運行應用程序並初始化上下文時,我得到一個NPE訪問autowired字段,並且在調試模式下它顯示爲空/未設置。我錯在期待resourceLoader存在嗎?我錯誤地斷言配置bean的自動裝配發生在其方法被調用之前? XML配置裝載這個bean被打上<方面:註解配置/>Spring @Configuration類需要自動裝配

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

回答

5

我不知道這是否是一個bug或者是預期的行爲。有時它對我有用,有時不適用。無論如何,有另一種實現你想要的方式:

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