ejemplo - @inject java




¿Cuál es la diferencia entre @Inject y @Autowired en Spring Framework? ¿Cuál usar bajo qué condición? (7)

Estoy revisando algunos blogs en SpringSource y en uno de los blogs, el autor usa @Inject y supongo que también puede usar @Autowired .

Aquí está la pieza de código:

@Inject private CustomerOrderService customerOrderService;

No estoy seguro de la diferencia entre @Inject y @Autowired y agradecería que alguien explicara su diferencia y cuál utilizar, ¿en qué situación?

https://code.i-harness.com


A partir de Spring 3.0, Spring ofrece soporte para las 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.


Además de lo anterior:

  1. El alcance predeterminado para los frijoles @Autowired es Singleton, mientras que usar la anotación JSR 330 @Inject es como el prototype de Spring.
  2. No hay equivalente de @Lazy en JSR 330 usando @Inject
  3. No hay equivalente de @Value en JSR 330 usando @Inject

La anotación @Inject es una de las recopilaciones de anotaciones JSR-330. Esto tiene las rutas de ejecución de Coincidencia por tipo, Coincidencia por calificador, Coincidencia por nombre. Estas rutas de ejecución son válidas tanto para el establecimiento como para la inyección de campo. El comportamiento de la anotación @Autowired es el mismo que la anotación @Inject . La única diferencia es que la anotación @Autowired es parte del framework Spring. @Autowired anotación también tiene las rutas de ejecución anteriores. Así que recomiendo el @Autowired para su respuesta.


La diferencia clave (notada al leer Spring Docs ) entre @Autowired y @Inject es que @Autowired tiene el atributo 'obligatorio' mientras que @Inject no tiene ningún atributo 'obligatorio'.


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

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


Suponiendo que aquí te refieres a las anotaciones javax.inject.Inject . @Inject es parte del estándar Java CDI ( Contexts and Dependency Injection ) introducido en Java EE 6 (JSR-299), lea más . Spring ha optado por admitir el uso de @Inject sinónimo de su propia anotación @Autowired .

Entonces, para responder a su pregunta, @Autowired es la propia anotación (heredada) de Spring. @Inject es parte de una nueva tecnología Java llamada CDI que define un estándar para la inyección de dependencias similar a Spring. En una aplicación de Spring, las dos anotaciones funcionan de la misma manera que Spring ha decidido admitir algunas anotaciones JSR-299 además de las propias.


@Inject no tiene atributo 'requerido'





inject