spring的PathMatchingResourcePatternResolver,如何通过包名找所有相关类?
作者:bin例如我要找
com.zengbingo.*下面的所有的类?我们可以用spring提供的PathMatchingResourcePatternResolver
@Test
public void testDDD() throws Exception{
final String pkgNamePrefix = "com.zengbingo"; //你要找到包名前缀
Set<Class<?>> classes = new LinkedHashSet<Class<?>>();
try {
String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
+ ClassUtils.convertClassNameToResourcePath(pkgNamePrefix)
+ "/**/*.class";
ResourcePatternResolver resourceLoader = new PathMatchingResourcePatternResolver();
Resource[] source = resourceLoader.getResources(pattern);
MetadataReaderFactory readerFactory = new CachingMetadataReaderFactory(resourceLoader);
for (Resource resource : source) {
if (resource.isReadable()) {
try{
MetadataReader reader = readerFactory.getMetadataReader(resource);
String className = reader.getClassMetadata().getClassName();
classes.add(Class.forName(className));
} catch (Throwable t){
log.debug("类加载错误", t);
}
}
}
}catch (Exception e){
log.error("寻找符合条件的包失败",e);
}
}
}