2011-11-02 8 views
4

Existe-t-il des bibliothèques Java qui me permettent d'utiliser BeanUtils comme l'accès aux propriétés bean.prop1.prop2 tout en permettant l'accès aux annotations sur le getter/champ lui-même?Accès aux propriétés du bean et annotations

Par exemple, j'ai une classe de haricots qui ressemble à ceci:

public class Child { 
    @SomeCustomAnnotation 
    private String name; 
    //standard bean getter setters 
    } 

public class Parent { 
    private Child child; 
    //standard bean getter setters 
} 

Et je voudrais être en mesure de récupérer non seulement la valeur de la propriété que je suis à la recherche, mais aussi des annotations annotés sur ce champ dont la valeur est renvoyée:

String childsName = SomeLibrary.getValue(parent, "child.name"); 
Annotation[] annotationsOnChildsName = SomeLibrary.getAnnotations(parent, "child.name"); 

Existe-t-il des bibliothèques permettant les deux fonctionnalités? Je peux utiliser Commons BeanUtils pour faire l'accès aux propriétés pures pour les valeurs et Plain Reflection pour obtenir les annotations sur les propriétés, mais il ne semble pas y avoir un moyen de combiner les deux capacités.

Répondre

3

À moins que je manque quelque chose que vous pouvez juste Field classe

Field f = Parent.class.getField("name"); 
Object value = f.get(parent); 
f.getAnnotations(); 
+1

de la réflexion La nuance est que je voudrais ici pour être en mesure de soutenir l'accès par le biais des conventions de haricots Java standard (ie. 'GetName()' et champ 'nom') ainsi que les propriétés imbriquées – BuffaloBuffalo

+0

Je pensais à cela et je ne suis pas sûr que ce soit vraiment possible, c'est à dire: vous ne pouvez le faire que sur la base de la convention. Par exemple, mon champ privé peut ne pas être nommé de la même manière que le accesseur de lecture ou même être du même type. –

+0

'getField' ne donne qu'un champ accessible au public, utilisez' getDeclaredField' pour obtenir des champs protégés – gerrytan

Questions connexes