最近有個需求,我須要獲取全部同一類型的定時任務的對象,並自動執行。java
我想的方案是:直接獲取某個接口下面全部的實現類的對象集合,方便之後只須要 實現這個接口,就能自動被加載執行。話很少說,說說個人實現方案。spring
開始想着用反射本身寫一個工具類,後面懶得去折騰,就直接用第三方工具包了,這裏我用的是org.reflections。bash
maven配置:maven
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections-spring</artifactId>
<version>${reflections.version}</version>
<exclusions>
<exclusion>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
</exclusion>
</exclusions>
</dependency>
複製代碼
我這裏去除javassist包是由於單獨引入了javassist其餘版本工具
另外就是代碼引用了,以DelayedBaseMonitor接口爲例:學習
List<DelayedBaseMonitor> monitorLists = new ArrayList<>();
Reflections reflections = new Reflections(delayedFindPackageName);
Set<Class<? extends DelayedBaseMonitor>> monitorClasses = reflections.getSubTypesOf(DelayedBaseMonitor.class);
for (Class<? extends DelayedBaseMonitor> monitor : monitorClasses) {
monitorLists.add(ApplicationContext.getBean(monitor));
}
複製代碼
這裏我用了Spring的ApplicationContext去獲取bean,這樣能獲取這些實現類裏面其餘spring注入的bean。若是是簡單方式的話,大家能夠直接經過spa
monitor.getNewInstance來實現code
總結對象
以上就是這篇文章的所有內容了,但願本文的內容對你們的學習或者工做具備必定的參考學習價值接口