Que diferencia hay entre crear el constructor y utilizar la anotacion @Autowired?

Pregunta de la clase:
Uso de anotación transactional
Alex Soto Mendez

Alex Soto Mendez

Pregunta
studenthace 4 años

Que diferencia hay entre crear el constructor y utilizar la anotacion @Autowired?

3 respuestas
para escribir tu comentario
    Hernán Antonio Ramírez Osorio

    Hernán Antonio Ramírez Osorio

    studenthace 4 años

    Consejo**

    Hernán Antonio Ramírez Osorio

    Hernán Antonio Ramírez Osorio

    studenthace 4 años

    Hola, realmente en cuanto al funcionamiento no existen diferencias, con cualquiera de las inyecciones tu aplicación funcionará igual.

    Sin embargo, a pesar de que el @Autowired es una de las formas permitidas por el framework y de hecho la mas elegante, NO es la mas recomendada por la comunidad.. Por varios motivos:

    1. No permite que las instancias sean inmutables (final). Basicamente en tiempo de ejecución tu dependencia inyectada podría tener cambios (de instancia u valores siendo un problema de seguridad). Deberiamos asegurar en lo posible que los objetos se mantengan SIEMPRE como los esperamos. Lo ideal sería declarar las inyecciones así:

      private final MyRepository myRepositoryInyected;

    2. Facilita romper el principio Single responsability de SOLID. Al inyectar dependencias de esta manera posiblemente se nos pase por alto cuantas dependencias hemos inyectado. Si tenemos muchas dependencias quiere decir que nuestra clase tiene MUCHAS responsabilidades y se debería dividir.

    3. Se incrementa el acoplamiento de tu clase al framework. Es decir, tu clase NECESITA del framework para poder funcionar. Si se inyecta por constructor esto sería transparente.

    Así que, el concejo sería que en lo preferible utilices dependencias de constructor.

    https://blog.marcnuri.com/inyeccion-de-campos-desaconsejada-field-injection-not-recommended-spring-ioc

    Anderson Martinez Jurado

    Anderson Martinez Jurado

    studenthace 4 años

    Hola, supongo que la diferencia es que con @Autowired vas a poder tener un constructor sin atributos en parametros, en cambio sin @Autowired te verias obligado a ingresar todas las variables que necesites inyectar dentro del constructor.

    Pero como tal, no hay ninguna diferencia de inyeccion, haciendolo por cada variable a hacerlo en el constructor.

Curso de Spring Boot [Empieza Gratis]

Curso de Spring Boot [Empieza Gratis]

Comienza tu camino para especializarte como backend developer en Java utilizando Spring Boot, este framework basado en Spring para construir aplicaciones stand-alone y production-grade que son muy sencillas de correr.

Curso de Spring Boot [Empieza Gratis]
Curso de Spring Boot [Empieza Gratis]

Curso de Spring Boot [Empieza Gratis]

Comienza tu camino para especializarte como backend developer en Java utilizando Spring Boot, este framework basado en Spring para construir aplicaciones stand-alone y production-grade que son muy sencillas de correr.