在spring中使用注解特别爽,但如果要实现自定义注解,如何知道classpath下那些类使用了自定义的注解呢?方法就是先找到所的类型,然后用class的 isAnnotationPresent(annotationClazz)来判断,最后加入自己的逻辑
public static void main(String[] args) throws Exception{
System.out.println(getClasspath("c.c.k"));
}
public static List<Class<?>> getClasspath(String packagePath) throws Exception {
ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resourcePatternResolver);
// 加载系统所有类资源
Resource[] resources = resourcePatternResolver.getResources("classpath*:" + packagePath.replaceAll("[.]", "/") + "/**/*.class");
List<Class<?>> list = new ArrayList<Class<?>>();
// 把每一个class文件找出来
for (Resource r : resources) {
MetadataReader metadataReader = metadataReaderFactory.getMetadataReader(r);
Class<?> clazz = ClassUtils.forName(metadataReader.getClassMetadata().getClassName(), null);
list.add(clazz);
}
return list;
}