Estoy revisando algunos blogs en SpringSource y en uno de los blogs, el autor está usando @Injecty supongo que él también puede usar @Autowired.
Aquí está el fragmento de código:
@Inject private CustomerOrderService customerOrderService;
No estoy seguro de la diferencia entre @Injecty @Autowiredagradecería si alguien explicara su diferencia y cuál usar en qué situación.

Respuestas:
Suponiendo que aquí te refieres a las
javax.inject.Injectanotaciones.@Injectforma parte del estándar Java CDI ( Contexts and Dependency Injection ) introducido en Java EE 6 (JSR-299), lea más . Spring ha optado por apoyar el uso como@Injectsinónimo de su propia@Autowiredanotación.Entonces, para responder a su pregunta,
@Autowiredes la propia anotación de Spring.@Injectes parte de una nueva 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 que Spring ha decidido admitir algunas anotaciones JSR-299 además de las suyas.fuente
@Injectes un JSR (JSR-330) separado del CDI (JSR-299).@Injectanotación JSR, es mejor que usar lo@Autowiredque bloquea su base de código con Spring DI.@Injectsolo no garantizará la independencia del marco. También necesitaría declarar frijoles inyectables sin mecanismos dependientes del marco como Spring's@Componentoapplication.xml, pero usar@Namedy@Singletona nivel de clase. No tengo idea si algún proyecto de Spring realmente declara frijoles así hoy, incluso nunca escuché de ningún proyecto que migró de Spring a JEE ...Aquí está una entrada de blog que compara
@Resource,@Injecty@Autowired, y parece hacer un trabajo bastante completa.Desde el enlace:
Las pruebas 2 y 7 indican que las referencias del autor son 'inyección por nombre de campo' y 'un intento de resolver un bean utilizando un calificador incorrecto', respectivamente.
La conclusión debería darle toda la información que necesita.
fuente
Para manejar la situación en la que no hay cableado, los beans están disponibles con el
@Autowiredrequiredatributo establecido enfalse.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.fuente
A partir de la primavera 3.0, Spring ofrece soporte para JSR-330 anotaciones de inyección de dependencia (
@Inject,@Named,@Singleton).Hay una sección separada en la documentación de Spring sobre ellos, que incluye comparaciones con sus equivalentes de Spring.
fuente
La diferencia clave (notada al leer Spring Docs ) entre
@Autowiredy@Injectes que@Autowiredtiene el atributo 'requerido' mientras que @Inject no tiene el atributo 'requerido'.fuente
@Autowired(required=false)términos simples, "elrequiredatributo indica que la propiedad no es necesaria para fines de cableado automático, la propiedad se ignora si no se puede cablear automáticamente".Mejor use @Inject todo el tiempo. Debido a que es el enfoque de configuración de Java (proporcionado por Sun) lo que hace que nuestra aplicación sea independiente del marco. Así que si saltas también tus clases funcionarán.
Si usa @Autowired, solo funcionará con spring porque @Autowired es una anotación proporcionada por spring.
fuente
@AutowiredLa anotación se define en el marco de Spring.@InjectLa anotación es una anotación estándar, que se define en la "Inyección de dependencia para Java" estándar (JSR-330) . Spring (desde la versión 3.0) admite el modelo generalizado de inyección de dependencia que se define en el estándar JSR-330. (Los marcos de Google Guice y el marco de Picocontainer también admiten este modelo).Con
@Injectse puede inyectar la referencia a la implementación de laProviderinterfaz, lo que permite inyectar las referencias diferidas.Anotaciones
@Injecty@Autowired- es analogías casi completas. Además de la@Autowiredanotación, la@Injectanotación se puede usar para propiedades de enlace automático, métodos y constructores.A diferencia de la
@Autowiredanotación, la@Injectanotación no tienerequiredatributo. Por lo tanto, si no se encuentran las dependencias, se generará una excepción.También hay diferencias en las aclaraciones de las propiedades de unión. Si hay ambigüedad en la elección de los componentes para la inyección,
@Namedse debe agregar el calificador. En una situación similar para la@Autowiredanotación se agregará el@Qualifiercalificador (JSR-330 define su propia@Qualifieranotación y, a través de este calificador,@Namedse define la anotación ).fuente
@Injectno tiene atributo 'requerido'fuente
Además de lo anterior:
@Autowiredbeans es Singleton, mientras que el uso de la@Injectanotación JSR 330 es como el prototipo de Spring .@Inject.@Inject.fuente
La
@Injectanotación es una de la colección de anotaciones JSR-330. Esto tiene rutas de ejecución Match by Type, Match by Qualifier, Match by Name. Estas rutas de ejecución son válidas tanto para el setter como para la inyección de campo. El comportamiento de la@Autowiredanotación es el mismo que la@Injectanotación. La única diferencia es que la@Autowiredanotación es parte del marco Spring.@AutowiredLa anotación también tiene las rutas de ejecución anteriores. Así que recomiendo el@Autowiredpara su respuesta.fuente