工作中遇到根据参数不同创建不同的对象执行不同的逻辑,由于类型较多避免太多的if,后期维护扩展造成困难,记录下解决方法
springboot启动的时候资源已经加载完毕,类信息放在map中,如下实现注入
@Autowired private Set<IEngineeringService> iEngineeringServiceSet;
由于实现IEngineeringService接口有三个,所以set长度为3
private Map<String, IEngineeringService> iEngineeringServiceMap = new LinkedHashMap<>();
// 构造策略bean map
@PostConstruct
public void init() {
for (IEngineeringService iEngineeringService : iEngineeringServiceSet) {
iEngineeringServiceMap.put(
String.valueOf(iEngineeringService.objType()), iEngineeringService);
}
}
map键值对:对象类型和类路径映射
接口如下,各个对象类型各自实现,如此springboot策略模式完成
public interface IEngineeringService {
/**
* 功能描述:创建对象
*
* @author xulei
* @date 10:59 2021/1/29
* @param nameSpace 数据库
* @param engineeringAddParam 创建对象传参
* @return 操作结果
*/
Object saveEngineeringObj(String nameSpace, EngineeringAddParam engineeringAddParam);
/**
* 功能描述:获取对象类型
*
* @author xulei
* @date 10:59 2021/1/29
* @return 对象类型
*/
Integer objType();
}