Springスキャンは指定されたカバンの下のすべてのクラス名をスキャンします.

1482 ワード

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