优化前部分代码:
每张报表对应一个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 接口