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