如何扫描自定义注释的类?

时间:2013-01-10 01:37:47

标签: java annotations

我有自定义注释,我想在运行时扫描所有类的注释。 做这个的最好方式是什么?我没有使用Spring。

2 个答案:

答案 0 :(得分:3)

您可以先使用Reflections Library确定类名,然后使用getAnnotations检查注释:

Reflections reflections = new Reflections("org.package.foo");

Set<Class<? extends Object>> allClasses = 
                 reflections.getSubTypesOf(Object.class);


for (Class clazz : allClasses) {
   Annotation[] annotations = clazz.getAnnotations();

   for (Annotation annotation : annotations) {
     if (annotation instanceof MyAnnotation) {
        MyAnnotation myAnnotation = (MyAnnotation) annotation;
        System.out.println("value: " + myAnnotation.value());
     }
   }
}     

答案 1 :(得分:0)

如果您不想循环上一个结果,可以使用getClass().getAnnotations()从类中获取注释,或者请求特定注释。为了使注释出现在结果上,它的保留必须是RUNTIME。例如(不严格正确):

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyAnnotation {}

检查Javadoc:Class#getAnnotation(Class)

之后你的课应该注释如下:

@MyAnnotation public class MyClass {}