este es mi código:
@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;
}
¿Es posible leer el valor de mi anotación @Column ( columnName = "xyz123") en otra clase?
java
annotations
getter-setter
java-6
Abejas
fuente
fuente
Myclass.class.getDeclaredFields()
para obtener campos privadosPor supuesto que es. Aquí hay una anotación de muestra:
Y un método anotado de muestra:
Y un método de muestra en otra clase que imprime el valor del testText:
No es muy diferente para anotaciones de campo como la suya.
¡Cheerz!
fuente
Nunca lo he hecho, pero parece que Reflection proporciona esto.
Field
es unAnnotatedElement
y así ha sidogetAnnotation
. Esta página tiene un ejemplo (copiado a continuación); bastante sencillo si conoce la clase de la anotación y si la política de anotaciones retiene la anotación en tiempo de ejecución. Naturalmente, si la política de retención no mantiene la anotación en tiempo de ejecución, no podrá consultarla en tiempo de ejecución.Una respuesta que se ha eliminado desde entonces (?) Proporcionó un enlace útil a un tutorial de anotaciones que puede resultarle útil; He copiado el enlace aquí para que la gente pueda usarlo.
Ejemplo de esta página :
fuente
Desarrollando la respuesta de @Cephalopod, si quisiera todos los nombres de columna en una lista, puede usar este delineador:
fuente
Si bien todas las respuestas dadas hasta ahora son perfectamente válidas, también se debe tener en cuenta la biblioteca de reflexiones de Google para un enfoque más genérico y fácil del escaneo de anotaciones, p.
fuente
También puedes usar tipos genéricos, en mi caso, teniendo en cuenta todo lo dicho antes puedes hacer algo como:
Recuerde que esto no equivaldrá al 100% a SomeClass.class.get (...) ();
Pero puede hacer el truco ...
fuente
En el caso común, tiene acceso privado a los campos, por lo que NO PUEDE usar getFields como reflejo. En lugar de esto, debe usar getDeclaredFields
Entonces, en primer lugar, debe tener en cuenta si su anotación de columna tiene la retención de tiempo de ejecución:
Después de eso, puedes hacer algo como esto:
Obviamente, le gustaría hacer algo con el campo: establezca un nuevo valor usando el valor de anotación:
Entonces, el código completo se puede ver así:
fuente
Para las pocas personas que solicitan un método genérico, esto debería ayudarlo (5 años después: p).
Para mi siguiente ejemplo, estoy extrayendo el valor de URL RequestMapping de métodos que tienen la anotación RequestMapping. Para adaptar esto a los campos, simplemente cambie el
a
Y cambie el uso de RequestMapping por cualquier anotación que desee leer. Pero asegúrese de que la anotación tenga @Retention (RetentionPolicy.RUNTIME) .
fuente
una de las formas en que lo usé:
fuente