最近有個需求,我須要獲取全部同一類型的定時任務的對象,並自動執行。java
我想的方案是:直接獲取某個接口下面全部的實現類的對象集合,方便之後只須要 實現這個接口,就能自動被加載執行。話很少說,說說個人實現方案。spring
開始想着用反射本身寫一個工具類,後面懶得去折騰,就直接用第三方工具包了,這裏我用的是org.reflections。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接口爲例:code
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。若是是簡單方式的話,大家能夠直接經過對象
monitor.getNewInstance來實現接口
總結get
以上就是這篇文章的所有內容了,但願本文的內容對你們的學習或者工做具備必定的參考學習價值it