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); } } }