Доступ к свойствам и аннотациям компонента

#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 для получения защищенных полей