基於註解的spring 在靜態方法中使用注入的類

博客搬移到這裏:http://yemengying.com/
有個本身的博客還蠻好玩的,bazinga!
在開發時遇到須要將多個來源的數據轉換爲統一的格式,不一樣來源的數據轉換邏輯不一樣。因此想利用工廠模式 讓全部的轉換類繼承一個公有的類 而後在工廠類中根據不一樣的來源 返回不一樣的實例。好比在處理A數據源時 返回AConverter,處理B數據源時 返回BConverter
一開始的寫法:this

@Component
public class ConverterFactory {

    @Resource
    private AConverter aConverter;
    @Resource
    private BConverter bConverter;
    @Resource
    private CConverter cConverter;

    public static POIConverter getConverter(String type) {
        switch (type) {
            case "a" : return aConverter;
            case "b" : return bConverter;
            case "c" : return cConverter;
        }
        return null;
    }
}

但是會報錯 由於靜態方法中不能使用非靜態的變量,而Resource註解不支持靜態屬性上添加。同事給出瞭解決方案 在初始化以後將包涵已經注入好各個converter的this付給一個靜態的變量factory 在getConverter方法中 經過factory來得到注入的對象。code

@Component
public class ConverterFactory {

    @Resource
    private AConverter aConverter;
    @Resource
    private BConverter bConverter;
    @Resource
    private CConverter cConverter;
    
    private static ConverterFactory factory;

    @PostConstruct
    public void init() {
        factory = this;
    }

    public static POIConverter getConverter(String type) {
        switch (type) {
            case "a" : return factory.aConverter;
            case "b" : return factory.bConverter;
            case "c" : return factory.cConverter;
        }
        return null;
    }

}
相關文章
相關標籤/搜索