首页 新闻 会员 周边 捐助

怎样在spring中类成员变量可按照条件自动装配

0
悬赏园豆:5 [已解决问题] 解决于 2022-07-29 10:10

场景:

我有一个处理业务的类Aclass,其中属性是一个基于接口引用类型的成员变量Iclass ,基于接口Iclass的实现有两个Bclass implements Iclass 和Cclass implements Icalss,或者可能更多个,需要按照特定条件自动装配。

需要解决的问题是:

假如满足条件B时就装配Bclass 满足C条件时就装配Cclass,如果都满足 则优先Bclass,如果多个实现类也一样,所以大家可能会想到@Conditional,但好像没法解决这个问题。

目前的方案:

我注入了接口的所有实现,然后通过条件去遍历Iclass [] 拿到我想要的装配,然后再再业务逻辑中使用,如下

@Autowired
private Iclass [] imlpl;

个人感觉很别扭,可以有其他实现方案吗?求各位大佬帮忙

韩老魔2022的主页 韩老魔2022 | 初学一级 | 园豆:197
提问于:2022-07-28 22:54
< >
分享
最佳答案
1

你这个可以使用工程模式实现

收获园豆:5
楠木大叔 | 老鸟四级 |园豆:2083 | 2022-07-29 07:21

很感谢,这个是一个很成熟的解决方法,我也得到了启发其他更适合的设计模式,真的很感谢。

韩老魔2022 | 园豆:197 (初学一级) | 2022-07-29 09:54
其他回答(1)
1

将所有的实现都存到一个Map<K,ImplValue>中
再写一个通用的判断方法,返回具体实现的K
再写一个通用的执行方法 传入参数+k 使用map.get(k) 得到具体的实现方法再执行
https://www.cnblogs.com/riusky/p/16530793.html

riusky | 园豆:202 (菜鸟二级) | 2022-07-29 01:01

很感谢你的建议。
这个和我使用自动装配注解的实现基本类似。

支持(0) 反对(0) 韩老魔2022 | 园豆:197 (初学一级) | 2022-07-29 09:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册