目录
一:开发需求
在springboot项目中,会遇到一些问题,将某个接口的所有实现类放入到类似工厂类中,通过某个方法传入特殊标识进行获取不同的接口实现,
二:前期代码
创建一个工厂类,编写方法,通过传入的参数不同,返回不同的new实例
三:整改思路
既然已经使用springboot,再出现new很呆,而且不是很高大上,所以进行整改,用springboot进行实现
四:整改实现
/**
* @Author WANGWEI
* @Date 2022/6/30 10:19
* @PackageName:com.demo.dao
* @ClassName: SimilarFactory
* @Description: 简易工厂
* @Version 1.0
*/
public class SimilarFactory {
@Resource
private ApplicationContext applicationContext;
private final Map<String, UserMapper> userMapperMap = new ConcurrentHashMap<>();
@PostConstruct
private void init() {
userMapperMap.putAll(applicationContext.getBeansOfType(UserMapper.class));
}
public UserMapper getUserMapper(String code){
switch (code){
case "01":
return userMapperMap.get("userMapper01");
case "02":
return userMapperMap.get("userMapper02");
case "03":
return userMapperMap.get("userMapper03");
default:
return null;
}
}
}
五:思路总结
spring最主要的能力就是解耦,我们在springboot项目中出现new关键字词的时候就需要思考,我们代码是否可以优化,本次思路主要就是ApplicationContext 上下文与PostConstruct初始化注解的使用。