我有我的自定义注释,我想在运行时扫描这个注释的所有类。 这样做的最好方法是什么?我没有使用Spring。如何扫描自定义注释的类?
0
A
回答
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());
}
}
}
0
你可能会使用getClass().getAnnotations()
或要求一个特定的注解从类注释,如果你不不想循环前面的结果。为了使注释出现在结果上,它的保留必须是RUNTIME。例如(并不完全正确):
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyAnnotation {}
检查的Javadoc:Class#getAnnotation(Class)
而在这之后你的类应注明是这样的:
@MyAnnotation public class MyClass {}
+0
谢谢。使用注释的主要原因是在init中扫描它们并实例化类,并在需要对象时使用hashmap进行查找。但是,我一直在考虑使用工厂来返回我需要的对象。我不确定哪种方法会更干净更快? – 12rad
相关问题
- 1. 使用自定义注释扫描类路径
- 2. 从maven插件扫描自定义注释类
- 3. 自定义注释使用Tomcat容器在Geronimo下扫描
- 4. 注释扫描不扫描类路径中的外部罐子
- 5. 你如何为自定义类注释?
- 6. 禁用:扫描kotlin注释
- 7. 扫描航线Laravel注释
- 8. Spring注释扫描标签
- 9. 扫描Java包注释
- 10. Android自定义Wifi扫描
- 11. 如何扫描注解的类?
- 12. 定义自定义扫描运算符
- 13. 通过自定义注释进行扫描的编程等效物
- 14. 自定义注释?
- 15. 的Java注释扫描带弹簧
- 16. 的WebSphere不扫描@WebService注释
- 17. 包中的注释扫描器
- 18. 自定义注释的抽象类
- 19. 使用自定义的注释,如何
- 20. Java - 将项目扫描为另一个自定义类的自定义类
- 21. 扫描给定的自定义属性的所有类
- 22. XML的自定义注释
- 23. Spring 3.0注释bean组件扫描
- 24. 从jar文件中扫描注释
- 25. 在运行时扫描Java注释
- 26. 是否有可能扫描Android类路径的注释?
- 27. CDI:从扫描中排除类的注释
- 28. 使用Google Reflections进行注释的Java扫描类
- 29. 如何注释自定义请求标头的类型?
- 30. 扫描 - hw自定义文档大小
'的getClass()getAnnotations()' ? – ApproachingDarknessFish