Java動態獲取某個介面下所有的實現類物件集合

執筆記憶的空白發表於2017-11-10


最近有個需求,我需要獲取所有同一型別的定時任務的物件,並自動執行。

我想的方案是:直接獲取某個介面下面所有的實現類的物件集合,方便以後只需要 實現這個介面,就能自動被載入執行。話不多說,說說我的實現方案。


開始想著用反射自己寫一個工具類,後面懶得去折騰,就直接用第三方工具包了 , 這裡我用的是org.reflections .


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。  如果是簡單方式的話,你們可以直接通過

monitor.getNewInstance來實現









相關文章