Comment l'injection de conteneur d'attributs de classe privée annotée fonctionne-t-elle en Java?

StackOverflow https://stackoverflow.com/questions/1615061

Question

J'ai commencé à lire le livre Enterprise Java Beans 3.0 de Bill Burke et Richard Monson-Haefel et le chapitre 4 contient ce code

@PersistenceContext(unitName="titan") private EntityManager manager;

La classe a alors des méthodes qui accèdent à ce champ (qui n'est jamais défini dans le constructeur et n'a pas de méthode de définition). Alors, comment le conteneur définit-il ce champ privé avec une instance réelle? Je suppose qu'il y a un peu de réflexion et / ou de magie bytecode en cours - comment cela se fait-il?

Était-ce utile?

La solution

getDeclaredFields () renverra une liste de champs déclarés dans la classe.

Le conteneur parcourt tous les champs en recherchant les annotations appropriées. Une fois que le champ nécessaire est trouvé, il appelle setAccessible (true) sur ce champ afin de pouvoir le manipuler à partir du code où il n'aurait normalement pas été accessible.

Autres conseils

manager.getClass().getDeclaredFields()

Vous permettra d'accéder aux champs. Voir les javadocs ici

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top