Springスキャンは指定されたカバンの下のすべてのクラス名をスキャンします.
1482 ワード
https://www.jianshu.com/p/22c939f97f1e
どのようなフレームであっても、Springを含み、この機能の最下層を完成するためには、
著者:司青玄リンク:https://www.jianshu.com/p/22c939f97f1e 出所:略書の著作権は作者の所有になります.商業転載は作者に連絡して授権を獲得してください.商業転載ではないので、出典を明記してください.
Springには既存の種類があります.それぞれ
どのようなフレームであっても、Springを含み、この機能の最下層を完成するためには、
ClassLoader.getResources()
またはClassLoader.getSystemResources()
の方法で実現されています.つまり、まず、classpathの下に指定された「リソース」を探し出します.おそらくファイルでもjarパッケージでもあり、その後、ファイルI/Oを通してjarを読み取り、各.class
ファイル名を全部並べばいいです.著者:司青玄リンク:https://www.jianshu.com/p/22c939f97f1e 出所:略書の著作権は作者の所有になります.商業転載は作者に連絡して授権を獲得してください.商業転載ではないので、出典を明記してください.
Springには既存の種類があります.それぞれ
ResourcePatternResolver
とCachingMetadataReaderFactory
とがあります.使い方は以下の通りです.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