¿Cómo funciona la inyección en contenedor de atributos de clase privada anotada en java?
-
06-07-2019 - |
Pregunta
Empecé a leer el libro Enterprise Java Beans 3.0 de Bill Burke y Richard Monson-Haefel y en el capítulo 4 tiene este código
@PersistenceContext(unitName="titan") private EntityManager manager;
La clase luego tiene métodos que acceden a este campo (que nunca se establece en el constructor y no tiene un método de establecimiento). Entonces, ¿cómo establece el contenedor este campo privado con una instancia real? Supongo que hay una reflexión y / o una magia de código de bytes en marcha: ¿cómo se hace?
Solución
getDeclaredFields () devolverá una lista de campos declarados en la clase.
El contenedor recorre todos los campos para verificar las anotaciones apropiadas. Una vez que se encuentra el campo necesario, invoca setAccessible (true) en ese campo para poder manipularlo desde el código donde normalmente no habría sido accesible.
Otros consejos
manager.getClass().getDeclaredFields()
Le dará acceso a los campos. Consulte javadocs aquí