¿Qué es javax.inyectar.¿Se supone que se usa una anotación con nombre?


Estoy tratando de entender el paquete javax.inject y no tengo claro para qué se supone que se usa la anotación javax.inject.Named. El Javadoc no explica la idea detrás de él.

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 en un frijol parece agregarlo a la fábrica de frijoles, pero la descripción de Javadoc es tan ligera que no puedo decir si esa es la comportamiento estándar o comportamiento específico del resorte.

Mis preguntas son:

  1. ¿Cuál es la diferencia entre @Named y @Qualifier
  2. ¿Cómo se supone que debe decirle al sistema de tiempo de ejecución que una clase debe ser inyectable en otras clases cuál es la anotación para eso? ¿El equivalente a @Component en primavera?

Actualización 1 hay una excelente explicación de @Named y @Qualifier, en el Buen artículo acerca de @Named y @Qualifier http://java.dzone.com/articles/java-ee6-cdi-named-components gracias @xmedeko por enlazar a él el comentario de abajo.

Author: JeroenHoek, 2011-03-24

4 answers

Use @Named para diferenciar entre diferentes objetos del mismo tipo enlazados en el mismo ámbito.

@Named("maxWaitTime")
public long maxWaitTimeMs;

@Named("minWaitTime")
public long minWaitTimeMs;

Sin el calificador @Named, el inyector no sabría a qué largo enlazar a qué variable.

Si desea crear anotaciones que actúen como @Named, utilice la anotación @Qualifier al crearlas. Si miras @Named, está anotado con @ Qualifier.

 60
Author: sbridges,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-16 15:34:25

@Inject en lugar de la primavera @Autowired para inyectar un frijol.
@Named en lugar de la Primavera @Component para declarar un frijol.

Esas JSR-330 anotaciones estándar se escanean y se recuperan de la misma manera que la anotación de primavera (siempre que lo siguiente jar esté en su classpath)

 37
Author: Nadav Finish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-29 14:00:08

Con respecto a #2, de acuerdo con la especificación JSR-330:

Este paquete proporciona dependencia anotaciones de inyección que habilitan clases portátiles, pero deja configuración de dependencias externas subir a la implementación del inyector.

Por lo tanto, depende del proveedor determinar qué objetos están disponibles para la inyección. En el caso de la primavera son todos los frijoles de primavera. Y cualquier clase anotada con anotaciones JSR-330 se agrega automáticamente como frijoles de primavera cuando se usa an AnnotationConfigApplicationContext.

 7
Author: sourcedelica,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-24 14:04:41

La función principal de la anotación @Named es definir un bean con el propósito de resolver sentencias EL dentro de la aplicación, generalmente a través de JSF EL resolvers. La inyección se puede realizar usando nombres, pero esta no era la forma en que la inyección en CDI debía funcionar, ya que CDI nos da una forma mucho más rica de expresar los puntos de inyección y los granos que se inyectan en ellos.

 4
Author: abbas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-30 01:39:41