凌风515
时不我待,只争朝夕

优化前部分代码:

每张报表对应一个task,定时任务中使用 @Autowired 注入。后期报表增加,@Autowired 会越来越多。

优化过程:

主要思路: 提供一个公共的接口,每张报表实现该接口。定时任务从spring容器中获取到对应报表实现类的bean,并使用该公共接口接收。调用接口方法即可。

1、公共接口

2、接口实现类

每张报表一个实现类,均实现 BaseTask 接口。

3、调用:

获取 spring 容器中接口的具体实现 bean。使用 ApplicationContextAware 接口。

ApplicationContextAware 接口:
spring 容器在初始化时,如果Spring配置文件中所定义的Bean实现了该接口,那么加载时会调用 setApplicationContext(ApplicationContext applicationContext) throws BeansException 方法,获得ApplicationContext对象。通过ApplicationContext对象就可以获取具体的实现类。

总结:

获取一个接口具体哪个实现类的方式
1、new 一个具体的接口实现类对象。
2、@Autowired 注入具体实现类。
3、使用 @Resource 注解指定实现类名称。

 4、@Qualifier 指定

 5、ApplicationContextAware 接口

 

 

posted on 2022-05-13 16:21  凌风515  阅读(3395)  评论(0编辑  收藏  举报