首页 > java > spring的PathMatchingResourcePatternResolver,如何通过包名找所有相关类?

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

您必须 [ 登录 ] 才能发表留言!