一個介面多個實現類,如何呼叫哪個實現類的方法
阿新 • • 發佈:2022-05-13
優化前部分程式碼:
每張報表對應一個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 介面