在将其标记为重复之前,请注意这是具有特定场景的非常具体的问题,我已经在论坛上进行了广泛搜索以获取任何答案线索。在报告重复之前,请确保在其他线程中完全解决了这篇文章中的查询。
我有以下情况:
带有 RUNTIME 保留策略的注释
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD) //can use in fields only.
public @interface TestAnnotation{
public String id();
}
它被用作
public class TestBean{
@TestAnnotation(id="t1")
private String test1;
@TestAnnotation(id="t2")
private String test2;
}
现在在其他课程中,我正在尝试使用
for (PropertyDescriptor propDescriptor : Introspector.getBeanInfo(Class.forName("TestBean")).getPropertyDescriptors()) {
Class<?> propertyType = propDescriptor.getPropertyType();
TestAnnotation myAnno= propertyType.getAnnotation(TestAnnotation.class);
但是 myAnno 的值是 Null。但是,如果我使用Class.forName("TestBean").getDeclaredFields()[1].getAnnotation(TestAnnotation.class)
; 我能够获得价值。这意味着 RUNTIME 保留正在工作。
我只需要关于如何使用 Bean Introspection 来获取注释的帮助。我不想使用getDeclaredFields
,所以请把它作为一种可能性。