我有一个处理业务的类Aclass,其中属性是一个基于接口引用类型的成员变量Iclass ,基于接口Iclass的实现有两个Bclass implements Iclass 和Cclass implements Icalss,或者可能更多个,需要按照特定条件自动装配。
假如满足条件B时就装配Bclass 满足C条件时就装配Cclass,如果都满足 则优先Bclass,如果多个实现类也一样,所以大家可能会想到@Conditional,但好像没法解决这个问题。
我注入了接口的所有实现,然后通过条件去遍历Iclass [] 拿到我想要的装配,然后再再业务逻辑中使用,如下
@Autowired
private Iclass [] imlpl;
个人感觉很别扭,可以有其他实现方案吗?求各位大佬帮忙
很感谢,这个是一个很成熟的解决方法,我也得到了启发其他更适合的设计模式,真的很感谢。
将所有的实现都存到一个Map<K,ImplValue>中
再写一个通用的判断方法,返回具体实现的K
再写一个通用的执行方法 传入参数+k 使用map.get(k) 得到具体的实现方法再执行
https://www.cnblogs.com/riusky/p/16530793.html
很感谢你的建议。
这个和我使用自动装配注解的实现基本类似。