Spring扫描出指定包下的所有类名

https://www.jianshu.com/p/22c939f97f1e

无论是什么框架,包括Spring, 完成这个功能底层都是用的ClassLoader.getResources()ClassLoader.getSystemResources()方法实现的,即先找出指定classpath下的"资源",可能是文件也可能是jar包,然后通过文件I/O读取jar, 把每一个.class文件名全部列出即可



作者:司青玄
链接:https://www.jianshu.com/p/22c939f97f1e
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Spring就有现成的类可以让我们直接使用, 它们分别是ResourcePatternResolverCachingMetadataReaderFactory,使用方法如下:

public class ScanTest extends BaseTestClass implements ResourceLoaderAware {
    /**
     * Spring容器注入
     */
    private ResourceLoader resourceLoader;

    @Test
    public void test() throws IOException {

        ResourcePatternResolver resolver = ResourcePatternUtils.getResourcePatternResolver(resourceLoader);
        MetadataReaderFactory metaReader = new CachingMetadataReaderFactory(resourceLoader);
        Resource[] resources = resolver.getResources("classpath*:your/package/name/**/*.class");

        for (Resource r : resources) {
            MetadataReader reader = metaReader.getMetadataReader(r);
            System.out.println(reader.getClassMetadata().getClassName());
        }

    }

    @Override
    public void setResourceLoader(ResourceLoader resourceLoader) {
        this.resourceLoader = resourceLoader;
    }
}

也可参考https://github.com/wanghongfei/pkg-scanner

你可能感兴趣的:(java基础)