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?

¿Fue útil?

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í

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top