在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;
}