Injection de dépendance avec @Inject en soudure (JSR-299 RI). Comment les @Produces correspondants trouvés?
-
24-09-2019 - |
Question
Je l'ai joué avec la JSR-299 Mise en oeuvre de référence « Weld » dans le but de l'utiliser dans une application autonome, et je l'ai jeté un oeil à la documentation, et émerveillés par la magie.
Ma question est comment le producteur à être @ Inject'ed se trouve? Un objet donné
Soit le compilateur java produit des notes pour les annotations qui est facile à trouver par le classloader ou le classpath complet doit être parcouru charger toutes les classes pour voir ce qu'ils font qui me semble très inefficace, ou il est une approche complètement différente.
Quel est le truc?
La solution
Le chemin de classe est analysé pour « archives de haricots ». archives Bean sont les bibliothèques qui contiennent META-INF/beans.xml
. Tous les haricots dans ces archives sont automatiquement enregistrées à l'BeanManager
et leurs annotations sont analysées et stockées. Chaque fois qu'un producteur est nécessaire, le gestionnaire de haricots est consulté sur les producteurs admissibles
Autres conseils
Je suppose que cela fonctionne le même que dans Seam: où le classpath est en effet analysé. Le impl cherchera également pour le @produce avec le champ correspondant plus petit, donc vous pouvez par exemple un produit au niveau de la session pour les utilisateurs connectés et un autre au niveau de l'application pour les utilisateurs anonymes.
J'sais, mais ce @Inject fait en partie par le père de Hibernate a finalement été retravaillé / influencé à la fin par SpringSource et Google. Peut-être que cela fonctionne un peu comme Guice?