2012-01-10 65 views
3

我正在尋找使用ClassPathScanningCandidateComponentProvider在我的JVM中查找特定類的子類。對多個jar文件使用ClassPathScanningCandidateComponentProvider嗎?

我做的幾乎正是在這裏描述:Scanning Java annotations at runtime

然而,當我通過JMX豆調用從螞蟻的代碼,我打了一個嚴重的問題。

我打電話:「com.mycompany」

然而,也有包含與包開始上課在我的類路徑多個JAR文件:與搜索包ClassPathScanningCandidateComponentProvider.findCandidateComponents。在掃描第一個文件後,Spring正在停止掃描(我知道這就好像我搜索java.lang.Object的sublasees一樣,我得到一個jar文件中的所有類)。

有沒有辦法告訴ClassPathScanningCandidateComponentProvider/Spring在第一個jar之後不要停止掃描?

乾杯

回答

8

證明,我操顯式定義類加載器,運行以來從JMX掃描時,它會尋找類在不同的裝載和發現什麼

//Add that at top of class 
private static final ClassLoader classLoader = MyClass.class.getClassLoader(); 

... 

ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(true); 

provider.addIncludeFilter(new AssignableTypeFilter(forClass)); 

//Had to add this line 
provider.setResourceLoader(new PathMatchingResourcePatternResolver(classLoader)); 

final Set<BeanDefinition> candidates = provider.findCandidateComponents(SEARCH_PACKAGE); 

...