首先来看看使用反射来获取注解名:
只需在获取class后调用getAnnotation方法即可,如下
这里是获取JPA映射b表名,Table.class,使用下面这个可以获取表名
import javax.persistence.Table;
annotation.name()
这里的item是一个Object,如果是class,就会得到得到不一样的,但可以强转得到
这里的aClass是直接扫描的,class文件得到的
下面是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自解码文件的方法,扫描包中的类。