我有自定义注释,我想在运行时扫描所有类的注释。 做这个的最好方式是什么?我没有使用Spring。
答案 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 {}