c'est mon code:
@Column(columnName="firstname")
private String firstName;
@Column(columnName="lastname")
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
est-il possible de lire la valeur de mon annotation @Column ( columnName = "xyz123") dans une autre classe?
java
annotations
getter-setter
java-6
Les abeilles
la source
la source
Myclass.class.getDeclaredFields()
pour obtenir des champs privésBien sûr que ça l'est. Voici un exemple d'annotation:
Et un exemple de méthode annotée:
Et un exemple de méthode dans une autre classe qui imprime la valeur du testText:
Pas très différent pour les annotations de champ comme la vôtre.
Cheerz!
la source
Je ne l'ai jamais fait, mais il semble que Reflection le fournisse.
Field
est unAnnotatedElement
et ainsi de suitegetAnnotation
. Cette page a un exemple (copié ci-dessous); assez simple si vous connaissez la classe de l'annotation et si la politique d'annotation conserve l'annotation au moment de l'exécution. Naturellement, si la politique de rétention ne conserve pas l'annotation au moment de l'exécution, vous ne pourrez pas l'interroger au moment de l'exécution.Une réponse qui a depuis été supprimée (?) A fourni un lien utile vers un didacticiel d'annotations que vous pourriez trouver utile; J'ai copié le lien ici pour que les gens puissent l'utiliser.
Exemple de cette page :
la source
Élaborant à la réponse de @Cephalopod, si vous vouliez tous les noms de colonnes dans une liste, vous pouvez utiliser cet oneliner:
la source
Bien que toutes les réponses données jusqu'à présent soient parfaitement valables, il convient également de garder à l'esprit la bibliothèque de réflexions google pour une approche plus générique et plus simple de l'analyse des annotations, par exemple
la source
Vous pouvez également utiliser des types génériques, dans mon cas, en tenant compte de tout ce qui a été dit avant de pouvoir faire quelque chose comme:
Rappelez-vous que cela ne sera pas équivalent à 100% à SomeClass.class.get (...) ();
Mais peut faire l'affaire ...
la source
Dans le cas courant, vous avez un accès privé pour les champs, vous NE POUVEZ donc PAS utiliser getFields en réflexion. Au lieu de cela, vous devez utiliser getDeclaredFields
Donc, tout d'abord, vous devez savoir si votre annotation Column a la rétention d'exécution:
Après cela, vous pouvez faire quelque chose comme ceci:
De toute évidence, vous aimeriez faire quelque chose avec le champ - définir une nouvelle valeur à l'aide de la valeur d'annotation:
Ainsi, le code complet peut ressembler à ceci:
la source
Pour les quelques personnes qui demandent une méthode générique, cela devrait vous aider (5 ans plus tard: p).
Pour mon exemple ci-dessous, je tire la valeur de l'URL RequestMapping des méthodes qui ont l'annotation RequestMapping. Pour adapter cela aux champs, changez simplement le
à
Et échangez l' utilisation de RequestMapping pour l'annotation que vous souhaitez lire. Mais assurez-vous que l'annotation a @Retention (RetentionPolicy.RUNTIME) .
la source
l'une des façons dont je l'ai utilisé:
la source