利用ApplicationContextAware动态调用接口的多个实现类

需求背景:在项目中的需求存在多个系统辅助判定规则获取任务的执行结果,每个规则对应一个编号,根据该编号可以动态调用某个具体的判定规则

在网上搜集了其他大神的资料,有多个实现方式,其中我使用的是ApplicationContextAware来实现该功能,亲测可用,参考资料链接如下:https://blog.****.net/jtf8525140/article/details/77509153/

下面记录我自己在项目中的使用情况:

1.首先创建一个接口,该接口有两个方法,分别是返回规则类型和具体的业务逻辑:

利用ApplicationContextAware动态调用接口的多个实现类

2.定义一个枚举类,里面是每个规则类型对应的编号:

利用ApplicationContextAware动态调用接口的多个实现类

3.实现接口的类,也就是具体的系统辅助判定规则类型:

利用ApplicationContextAware动态调用接口的多个实现类

需要注意的是实现类必须交给spring容器管理

4.创建判定规则工厂类,完成后可以根据编号就可获取具体的辅助判定规则实现类:

利用ApplicationContextAware动态调用接口的多个实现类

首先该类必须交给spring容器管理,然后实现ApplicationContextAware接口,实现接口方法setApplicationContext,此处是将spring容器作为参数传递到该类中,这样调用getBeansOfType方法就能获取容器中的其他类,也就是实现TaskJudgeLogicBase接口的各个实现类,最后将所有的实现类存储到map中,键就是规则的编号,值为具体的实现类

最后在需要调用的地方直接根据编号就可获取具体的实现类:

利用ApplicationContextAware动态调用接口的多个实现类