Inyección de dependencia con @Inject en Weld (JSR-299 RI). ¿Cómo está la @Produces correspondiente se ha encontrado?
-
24-09-2019 - |
Pregunta
He jugado con el JSR-299 implementación de referencia "Weld" con el propósito de utilizarlo en una aplicación independiente, y he tenido un vistazo a la documentación, y se maravilló de la magia.
Mi pregunta es ¿Cómo el productor de un objeto dado para ser @ Inject'ed se encuentra?
O bien el compilador de Java genera consejos para las anotaciones que se encuentran fácilmente por el cargador de clases, o la ruta de clase completa debe ser atravesada cargar todas las clases para ver lo que hacen que suena muy ineficiente para mí, o es un enfoque completamente diferente.
¿Cuál es el truco?
Solución
La ruta de clases se analizan en busca de "archivos de frijol". archivos de frijol son aquellas bibliotecas que contienen META-INF/beans.xml
. Todos los frijoles en estos archivos se registran automáticamente con el BeanManager
y sus anotaciones se analizan y almacenan. Siempre que se necesite un productor del gestor de beans es consultado sobre los productores elegibles
Otros consejos
supongo que funciona igual que en la costura: en el que la ruta de clases es, en efecto escaneada. El impl también buscará el @produce con el alcance coincidente más pequeño, lo que puede tener por ejemplo un producto de nivel de sesión para los usuarios registrados y otro nivel de aplicación para los usuarios anónimos.
No sé, pero esto @Inject parcial hecho por el padre de Hibernate finalmente fue reelaborado / influenciada al final de SpringSource y Google. Tal vez funciona un poco como Guice?