Das ist mein 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;
}
Ist es möglich, den Wert meiner Anmerkung @Column ( columnName = "xyz123") in einer anderen Klasse zu lesen ?
java
annotations
getter-setter
java-6
Bienen
quelle
quelle
Myclass.class.getDeclaredFields()
, um private Felder zu erhaltenNatürlich ist es das. Hier ist eine Beispielanmerkung:
Und eine kommentierte Beispielmethode:
Und eine Beispielmethode in einer anderen Klasse, die den Wert des testText druckt:
Nicht viel anders für Feldanmerkungen wie Ihre.
Cheerz!
quelle
Ich habe es noch nie gemacht, aber es sieht so aus, als ob Reflection dies bietet.
Field
ist einAnnotatedElement
und so hat esgetAnnotation
. Diese Seite enthält ein Beispiel (unten kopiert). Ganz einfach, wenn Sie die Klasse der Annotation kennen und wenn die Annotationsrichtlinie die Annotation zur Laufzeit beibehält. Wenn die Aufbewahrungsrichtlinie die Anmerkung zur Laufzeit nicht beibehält, können Sie sie zur Laufzeit natürlich nicht abfragen.Eine Antwort, die inzwischen gelöscht wurde (?), Bietet einen nützlichen Link zu einem Tutorial zu Anmerkungen , das Sie möglicherweise hilfreich finden. Ich habe den Link hier kopiert, damit die Leute ihn verwenden können.
Beispiel von dieser Seite :
quelle
Wenn Sie auf die Antwort von @Cephalopod eingehen und alle Spaltennamen in einer Liste haben möchten, können Sie diesen Oneliner verwenden:
quelle
Während alle bisher gegebenen Antworten vollkommen gültig sind, sollte man auch die Google Reflections-Bibliothek berücksichtigen, um einen allgemeineren und einfacheren Ansatz für das Scannen von Anmerkungen zu erhalten, z
quelle
Sie können in meinem Fall auch generische Typen verwenden, wobei Sie alles berücksichtigen, was gesagt wurde, bevor Sie etwas tun können wie:
Denken Sie daran, dass dies nicht zu 100% mit SomeClass.class.get (...) () übereinstimmt.
Aber kann den Trick machen ...
quelle
In der Regel haben Sie privaten Zugriff auf Felder, sodass Sie getFields NICHT in Reflection verwenden können. Stattdessen sollten Sie getDeclaredFields verwenden
Zunächst sollten Sie sich also darüber im Klaren sein, ob Ihre Spaltenanmerkung die Laufzeitaufbewahrung aufweist:
Danach können Sie so etwas tun:
Natürlich möchten Sie etwas mit dem Feld tun - setzen Sie einen neuen Wert mit dem Anmerkungswert:
Der vollständige Code kann also folgendermaßen aussehen:
quelle
Für die wenigen Menschen, die nach einer generischen Methode fragen, sollte dies hilfreich sein (5 Jahre später: p).
In meinem folgenden Beispiel ziehe ich den RequestMapping-URL-Wert aus Methoden mit der RequestMapping-Annotation. Um dies für Felder anzupassen, ändern Sie einfach die
zu
Tauschen Sie die Verwendung von RequestMapping gegen die Anmerkungen aus, die Sie lesen möchten . Stellen Sie jedoch sicher, dass die Annotation @Retention (RetentionPolicy.RUNTIME) enthält .
quelle
eine der Möglichkeiten, wie ich es benutzt habe:
quelle