Estoy tratando de entender el javax.inject
paquete y no tengo claro para qué javax.inject.Named
se supone que se usa la anotación. El Javadoc no explica la idea que hay detrás.
Javadoc está en http://download.oracle.com/javaee/6/api/javax/inject/Named.html
Estoy usando Spring 3.0 para escribir algunos programas de muestra, al poner @Named
un bean parece agregarlo a la fábrica de frijoles, pero la descripción de Javadoc es tan ligera que no puedo decir si ese es el comportamiento estándar o el comportamiento específico de Spring.
Mis preguntas son:
- ¿Cuál es la diferencia entre
@Named
y@Qualifier
- ¿Cómo se supone que le diga al sistema Runtime que una clase debe ser inyectable en otras clases cuál es la anotación para eso? ¿El equivalente de
@Component
en primavera?
En la Actualización 1 hay una excelente explicación @Named
y @Qualifier
en el artículo de Niza sobre @Named
y @Qualifier
https://dzone.com/articles/java-ee6-cdi-named-components gracias @xmedeko por vincularlo al comentario a continuación.
Respuestas:
Úselo
@Named
para diferenciar entre diferentes objetos del mismo tipo enlazados en el mismo ámbito.Sin el
@Named
calificador, el inyector no sabría qué largo enlazar a qué variable.Si desea crear anotaciones que actúen como
@Named
, utilice la@Qualifier
anotación al crearlas .Si miras
@Named
, está anotado con@Qualifier
.fuente
@Named
y@Qualifier
java.dzone.com/articles/java-ee6-cdi-named-components@Inject
en lugar de Spring@Autowired
para inyectar un bean.@Named
en lugar de Spring@Component
para declarar un bean.Esas anotaciones estándar JSR-330 se escanean y recuperan de la misma manera que la anotación Spring (siempre que lo siguiente
jar
esté en su ruta de clase)fuente
Con respecto al # 2, de acuerdo con la especificación JSR-330:
Por lo tanto, depende del proveedor determinar qué objetos están disponibles para la inyección. En el caso de Spring son todos los frijoles Spring. Y cualquier clase anotada con anotaciones JSR-330 se agrega automáticamente como Spring beans cuando se usa un AnnotationConfigApplicationContext.
fuente
La función principal de la anotación @Named es definir un bean con el propósito de resolver declaraciones EL dentro de la aplicación, generalmente a través de resolutores JSF EL. La inyección se puede realizar usando nombres, pero no era así como se suponía que funcionara la inyección en CDI, ya que CDI nos brinda una forma mucho más rica de expresar los puntos de inyección y los granos que se inyectarán en ellos.
fuente