Spring扫描并且获取某个包下的所有class:
参考:添加链接描述
private List<String> getAllEntity() throws IOException, ClassNotFoundException {
List<String> ret = new ArrayList<>();
PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver = new PathMatchingResourcePatternResolver();
CachingMetadataReaderFactory cachingMetadataReaderFactory = new CachingMetadataReaderFactory();
Resource[] resources = pathMatchingResourcePatternResolver.getResources("classpath*:com/xxx/xxx/object/**/*.class");
ClassLoader loader = ClassLoader.getSystemClassLoader();
for (Resource resource : resources) {
MetadataReader reader = cachingMetadataReaderFactory.getMetadataReader(resource);
String className = reader.getClassMetadata().getClassName();
Class aClass = loader.loadClass(className);
//to do someing
......
......
......
}
}
PathMatchingResourcePatternResolver获取资源文件。
CachingMetadataReaderFacotry元数据集缓存读取工厂,用于读取元数据的。
MetadataReader元数据集缓存工厂读取的数据,他里面使用getClassMetadata().getClassName()可以获取class的名字。
ClassLoader通过className找到对应的class。
上面是通过java自解码文件的方法,扫描包中的类。