#java #reflection #apache-commons-beanutils
#java #отражение #apache-commons-beanutils
Вопрос:
Существуют ли какие-либо библиотеки Java, которые позволяют мне использовать BeanUtils, такие как property access bean.prop1.prop2
, предоставляя при этом доступ к аннотациям в самом получателе / поле?
Например, у меня есть класс компонента, который выглядит следующим образом:
public class Child {
@SomeCustomAnnotation
private String name;
//standard bean getter setters
}
public class Parent {
private Child child;
//standard bean getter setters
}
И я хотел бы иметь возможность извлекать не только значение свойства, которое я ищу, но и любые аннотации, аннотированные в этом поле, значение которого возвращается:
String childsName = SomeLibrary.getValue(parent, "child.name");
Annotation[] annotationsOnChildsName = SomeLibrary.getAnnotations(parent, "child.name");
Существуют ли какие-либо библиотеки, которые позволяют использовать обе функции? Я могу использовать Commons BeanUtils для чистого доступа к свойствам для значений и простого отражения для получения аннотаций к свойствам, но, похоже, нет способа объединить обе возможности.
Ответ №1:
Если я чего-то не упускаю, вы можете использовать только класс поля отражения
Field f = Parent.class.getField("name");
Object value = f.get(parent);
f.getAnnotations();
Комментарии:
1. Нюанс здесь в том, что я хотел бы иметь возможность поддерживать доступ через стандартные соглашения Java bean (т.е.
getName()
и полеname
) , а также вложенные свойства2. Я думал об этом и не уверен, что это действительно возможно, то есть: вы могли бы сделать это только на основе соглашения. Например, мое личное поле может иметь другое имя, не совпадающее с именем установщика getter, или даже иметь тот же тип.
3.
getField
предоставляет только общедоступное поле, используйтеgetDeclaredField
для получения защищенных полей