Inyección de constructor frente a inyección de setter: diferencia y comparación

Cuando la resolución de dependencia la realiza un agente externo en lugar de la propia clase, se conoce como inyección de dependencia.

Hay dos formas estándar de inyección de dependencia que se admiten en el marco Spring, a través de un argumento constructor o mediante el uso del método setter.

El primer tipo de inyección de dependencia se conoce como constructor inyección, y esta última se conoce como inyección setter. Ambos métodos se utilizan para diferentes propósitos y tienen sus propios pros y contras.

Puntos clave

  1. La inyección de constructor garantiza la creación completa de objetos con todas las dependencias; La inyección de setter permite la creación parcial de objetos.
  2. La inyección de constructor promueve la inmutabilidad; La inyección de setter permite objetos mutables.
  3. La inyección de constructor evita las dependencias circulares; la inyección de setter puede conducir a dependencias circulares.

Inyección de constructor vs Inyección de setter 

La inyección de constructor es un tipo de inyección de dependencia en Spring Framework que usa un constructor para inyectar dependencia. Una inyección de setter es un tipo de inyección de dependencia en el marco Spring que utiliza métodos de setter para inyectar dependencia. Puede inyectar dependencia parcial y es más flexible.

Inyección de constructor vs Inyección de setter

La inyección de constructor es un tipo de inyección de dependencia en Spring Framework que usa un constructor para inyectar dependencia. Las dependencias que se requieren para cualquiera de las clases se especifican como parámetros del constructor de esa clase específica.

La inyección de constructor no permite que el desarrollador construya ningún objeto a menos que todas las dependencias estén listas y, por lo tanto, garantiza una inyección de dependencia exitosa.

La inyección de setter es un tipo de inyección de dependencia en Spring Framework que utiliza métodos de setter para inyectar dependencia. Tiene métodos setter del formulario set XYZ (), donde XYZ denota una dependencia que inyecta los objetos dependientes en el cliente.

Esta forma de resolver la dependencia es muy común en el framework Spring.

Tabla de comparación

Parámetros de comparaciónInyección de constructorInyección de Setter 
Dependencia inyectadaUtiliza un constructor.Utiliza métodos setter.
legibilidadNo es muy legible en comparación con el setter.Es más legible.
Anular propiedadNo se puede anular la dependencia.Puede anular ciertas dependencias.
CambiosSiempre crea una nueva instancia de bean.No crea ninguna nueva instancia de bean.
InmutabilidadApoya la inmutabilidad.No es compatible.

¿Qué es la inyección de constructores?

La inyección de constructores es una de las formas estándar de resolver la dependencia dentro del marco Spring, que define estáticamente la lista de dependencias requeridas para las clases asignándolas como parámetros al constructor de la clase.

Lea también  Yasmin vs Ocella: Diferencia y Comparación

Todas las clases que requieren dependencia deben tener un constructor público dentro de ellas, que toma una instancia como argumento del constructor, y ese constructor debe ser necesariamente el único constructor público dentro de esa clase.

Si se necesita más de una dependencia, los argumentos adicionales deben agregarse al mismo constructor. Se debe seguir un principio de responsabilidad única para garantizar que la dependencia se inserte por completo, que establece que los miembros deben hacer una sola cosa.

El constructor debe mantenerse libre de cualquier otra lógica para que el constructor de las clases sea más rápido y fiable.

Un hecho importante de la inyección del constructor es que los objetos no se construirán a menos que todas las dependencias estén listas. Como crea nuevas instancias cada vez que se llama al constructor, no es posible anularlo.

La inyección de constructores se utiliza básicamente en los casos en que es necesario crear objetos con todas las dependencias. Esta es la forma más aplicable y sencilla de implementar dependencias correctamente.

inyección de constructor

¿Qué es la inyección Setter?

La inyección de setter es una de las formas estándar de resolver la dependencia dentro del marco Spring, que utiliza los métodos setter para resolver las dependencias. Los métodos setter tienen la forma set XYZ (), donde XYZ especifica la dependencia que debe inyectarse.

En este tipo de método de inyección, primero se crea el objeto y luego se inyecta la dependencia. Para configurar Spring, XML se utilizan archivos; por lo tanto, la legibilidad es una gran preocupación.

Como los métodos de establecimiento tienen una forma específica de nombres de métodos, mejora la legibilidad de muchas maneras. Cuando existe la necesidad de inyectar una mayor cantidad de dependencias, entonces el tipo de inyección de setter es muy favorecido y preferido sobre otros tipos de métodos de inyección.

Además de eso, al usar la inyección de setter, los desarrolladores pueden anular y cambiar fácilmente los valores porque no crea una nueva instancia de bean cada vez. El único inconveniente de la inyección de setter es que no garantiza una inyección de dependencia completa.

Lea también  Módulo plástico vs momento de inercia: diferencia y comparación

No hay garantía de si un determinado objeto tiene dependencia inyectada o no. En otras palabras, significa que puede haber un objeto con dependencia incompleta. La inyección de setter es la forma más flexible y común de implementar la inyección de dependencia.

inyección de setter

Principales diferencias entre la inyección de constructor y la inyección de setter 

  1. Cuando se usa la inyección de constructor para inyectar la dependencia, se hace usando un constructor en cualquier bean administrado por Spring, mientras que la inyección de Setter usa métodos de establecimiento como set dependency() con el fin de inyectar dependencia en cualquiera de los beans administrados por el contenedor IOC de Spring.
  2. La inyección de setter es más legible en comparación con la inyección de constructor, ya que el método setter siempre tiene nombres que comienzan con la palabra set como setXYZ() y, por lo tanto, es fácil de leer en Spring. XML config e interprete la dependencia que se está configurando, mientras que la inyección de Constructor usa un índice con el fin de inyectar la dependencia.
  3. Ciertas dependencias se pueden anular usando la inyección de setter, mientras que esto no es posible usando la inyección de constructor como cada vez que se crea un nuevo objeto cuando se llama al constructor.
  4. Al usar la inyección de setter, el valor se puede cambiar fácilmente ya que no crea nuevas instancias de bean, mientras que ese no es el caso al usar la inyección de constructor porque siempre crea una nueva instancia de bean.
  5. La inyección de constructor admite la inmutabilidad, mientras que, por otro lado, la inyección de setter no admite la inmutabilidad.
Referencias
  1. https://digitalcommons.calpoly.edu/csse_fac/34/
  2. https://books.google.com/books?hl=en&lr=&id=InfRDwAAQBAJ&oi=fnd&pg=PA63&dq=constructor+injection&ots=Hon_bCw-Kv&sig=VdsD_S0lCfP3D8idI8q4F6RnhoE

Última actualización: 19 julio, 2023

punto 1
¿Una solicitud?

Me he esforzado mucho en escribir esta publicación de blog para brindarle valor. Será muy útil para mí, si considera compartirlo en las redes sociales o con sus amigos/familiares. COMPARTIR ES ♥️

25 pensamientos sobre "Inyección de constructor versus inyección de setter: diferencia y comparación"

  1. Las explicaciones de las inyecciones de constructores y definidores resaltan la importancia de gestionar adecuadamente las dependencias de objetos para un desarrollo de software sólido y mantenible.

    Responder
    • De hecho, Vcox. Una consideración cuidadosa de los métodos de inyección de dependencia es esencial para garantizar la viabilidad y mantenibilidad a largo plazo de los sistemas de software.

      Responder
    • Bien articulado, Vcox. Gestionar las dependencias de forma eficaz es un aspecto fundamental del desarrollo de aplicaciones escalables y mantenibles.

      Responder
  2. La información detallada sobre las inyecciones de constructores y definidores proporciona a los desarrolladores una sólida comprensión de cómo gestionar las dependencias de forma eficaz en las aplicaciones Spring Framework.

    Responder
    • Acertado, Rogers Natasha. Comprender las complejidades de los métodos de inyección de dependencia es crucial para mantener bases de código limpias y escalables.

      Responder
  3. Es fascinante cómo las inyecciones de constructor y definidor ofrecen diferentes niveles de soporte para inmutabilidad y dependencias circulares, lo que afecta el diseño y el comportamiento de la aplicación.

    Responder
    • Absolutamente, Christian13. El potencial de dependencias circulares y la inmutabilidad de los objetos deben ser consideraciones centrales al elegir un método de inyección de dependencia.

      Responder
    • No podría estar más de acuerdo, Christian13. Las implicaciones de estas diferencias en la arquitectura general del sistema son sustanciales y deben considerarse cuidadosamente.

      Responder
  4. La tabla de comparación proporciona una descripción general concisa de los pros y los contras de la inyección de constructor y definidor, lo que facilita decidir cuál usar en diferentes contextos.

    Responder
    • Absolutamente, Amorris. Es esencial sopesar las ventajas y desventajas entre la inmutabilidad, la legibilidad y la integridad de la creación de objetos al elegir el método de inyección.

      Responder
    • Agradezco la comparación detallada. Ayuda a los desarrolladores a tomar decisiones informadas basadas en los requisitos específicos de la aplicación.

      Responder
  5. Las explicaciones detalladas de las inyecciones de constructores y definidores brindan información valiosa sobre las diferencias y los casos de uso de cada enfoque.

    Responder
    • Bien dicho, Darren. Comprender los conceptos fundamentales y las implicaciones de los métodos de inyección de dependencia es crucial para que los desarrolladores construyan sistemas robustos y mantenibles.

      Responder
  6. Las explicaciones detalladas de las inyecciones de constructores y definidores arrojan luz sobre las compensaciones entre la integridad de la creación de objetos y la flexibilidad en la gestión de dependencias.

    Responder
    • Absolutamente, Eden60. Equilibrar la integridad y la flexibilidad en la inyección de dependencias es crucial para desarrollar aplicaciones de software escalables y mantenibles.

      Responder
    • Muy bien resumido, Eden60. Comprender estas compensaciones es esencial para tomar decisiones informadas sobre el diseño y la arquitectura de los sistemas de software.

      Responder
  7. La comparación entre las inyecciones de constructor y setter proporciona a los desarrolladores una comprensión clara de las implicaciones de cada método en el diseño general y el comportamiento de la aplicación.

    Responder
    • Bien dicho, huye. Comprender las implicaciones de los diferentes métodos de inyección de dependencia es crucial para desarrollar soluciones de software sólidas y fáciles de mantener.

      Responder
  8. La comparación de las inyecciones de constructor y configurador deja claro que ambos enfoques tienen distintas ventajas e implicaciones en el diseño general y el comportamiento de la aplicación.

    Responder
    • Absolutamente, Qrogers. Es esencial evaluar los requisitos e implicaciones específicos de cada método de inyección para tomar decisiones de diseño informadas.

      Responder
  9. Las explicaciones detalladas de las inyecciones de constructores y definidores brindan a los desarrolladores información valiosa sobre cómo diseñar y administrar dependencias complejas de manera efectiva.

    Responder
    • Bien dicho, Archie30. Tener un conocimiento profundo de los métodos de inyección de dependencia es crucial para diseñar arquitecturas de software sólidas y fáciles de mantener.

      Responder
  10. ¡Gran explicación! Ambos métodos de inyección de dependencia tienen sus ventajas e inconvenientes que deben considerarse cuidadosamente en cada proyecto.

    Responder
    • Estoy de acuerdo, Ava. La inyección de constructor es una excelente opción cuando es necesario garantizar la creación completa de objetos con todas las dependencias, mientras que la inyección de definidor es más flexible pero no garantiza la inyección de dependencia completa.

      Responder
    • Gracias por la explicación clara. Es importante evaluar las necesidades específicas del proyecto para determinar el método más apropiado de inyección de dependencia.

      Responder

Deja un comentario

¿Quieres guardar este artículo para más tarde? ¡Haz clic en el corazón en la esquina inferior derecha para guardar en tu propio cuadro de artículos!