部落格搬移到這裡:http://yemengying.com/
有個自己的部落格還蠻好玩的,bazinga!
在開發時遇到需要將多個來源的資料轉換為統一的格式,不同來源的資料轉換邏輯不同。所以想利用工廠模式 讓所有的轉換類繼承一個公有的類 然後在工廠類中根據不同的來源 返回不同的例項。比如在處理A資料來源時 返回AConverter,處理B資料來源時 返回BConverter
一開始的寫法:
@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來獲得注入的物件。
@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;
}
}