¿Cuál es la diferencia entre @Inject y @Autowired en Spring Framework? ¿Cuál usar bajo qué condiciones?

Resuelto Rachel asked hace 13 años • 11 respuestas

Estoy revisando algunos blogs en SpringSource y en uno de los blogs, el autor está usando @Injecty supongo que también puede usar @Autowired.

Aquí está el fragmento de código:

@Inject private CustomerOrderService customerOrderService;

Entonces, ¿cuál es la diferencia entre usar @Injecty @Autowired? Agradecería que alguien explicara su diferencia y cuál usar en cada situación.

Rachel avatar Aug 22 '11 09:08 Rachel
Aceptado

Suponiendo que aquí te refieres a la javax.inject.Injectanotación. @Injectes parte del estándar Java CDI ( Inyección de contextos y dependencias ) introducido en Java EE 6 (JSR-299), lea más . Spring ha optado por admitir el uso de la @Injectanotación como sinónimo de su propia @Autowiredanotación.

Entonces, para responder a su pregunta, @Autowiredestá la propia anotación de Spring. @Injectes parte de una tecnología Java llamada CDI que define un estándar para la inyección de dependencia similar a Spring. En una aplicación Spring, las dos anotaciones funcionan de la misma manera, ya que Spring decidió admitir algunas anotaciones JSR-299 además de las suyas.

pap avatar Aug 22 '2011 07:08 pap

Aquí hay una publicación de blog que compara @Resource, @Injecty @Autowired, y parece hacer un trabajo bastante completo.

Desde el enlace:

Con la excepción de las pruebas 2 y 7, la configuración y los resultados fueron idénticos. Cuando miré debajo del capó, determiné que las anotaciones '@Autowired' y '@Inject' se comportan de manera idéntica. Ambas anotaciones utilizan 'AutowiredAnnotationBeanPostProcessor' para inyectar dependencias. '@Autowired' y '@Inject' se pueden usar de forma intercambiable para inyectar Spring beans. Sin embargo, la anotación '@Resource' utiliza el 'CommonAnnotationBeanPostProcessor' para inyectar dependencias. Aunque utilizan diferentes clases de postprocesadores, todos se comportan de forma casi idéntica. A continuación se muestra un resumen de sus rutas de ejecución.

Las pruebas 2 y 7 a las que hace referencia el autor son 'inyección por nombre de campo' y 'un intento de resolver un bean usando un calificador incorrecto', respectivamente.

La Conclusión debería brindarle toda la información que necesita.

nicholas.hauschild avatar Aug 22 '2011 05:08 nicholas.hauschild

Para manejar la situación en la que no hay cableado, hay beans disponibles con el @Autowired requiredatributo establecido en false.

Pero cuando se usa @Inject, la interfaz del Proveedor funciona con el bean, lo que significa que el bean no se inyecta directamente sino con el Proveedor.

amits avatar Jan 25 '2012 14:01 amits

La diferencia clave (que se nota al leer Spring Docs ) entre @Autowiredy @Injectes que @Autowiredtiene el atributo 'requerido' mientras que @Inject no tiene ningún atributo 'requerido'.

Lucky avatar Nov 17 '2015 09:11 Lucky

A partir de Spring 3.0, Spring ofrece soporte para anotaciones de inyección de dependencia JSR-330 ( ,, @Inject) .@Named@Singleton

Hay una sección separada en la documentación de Spring sobre ellos, que incluye comparaciones con sus equivalentes de Spring.

Andre Steingress avatar Jul 17 '2013 09:07 Andre Steingress