博客搬移到這裏: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; } }