Logo es.removalsclassifieds.com

Diferencia entre inyección de constructor e inyección de setter (con tabla)

Tabla de contenido:

Anonim

Cuando la resolución de dependencias 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 de Spring, a través de un argumento de constructor o mediante el método setter. El primer tipo de inyección de dependencia se conoce como inyección de constructor y el último se conoce como inyección de setter. Ambos métodos se utilizan para diferentes propósitos y tienen sus pros y sus contras.

Inyección de constructor vs inyección de Setter

La diferencia entre la inyección de constructor y la inyección de Setter es que la inyección de constructor usa constructor y, por otro lado, la inyección de setter usa métodos de setter para inyectar dependencia. Estos dos tipos de formas de inyección se diferencian entre sí en función de varios parámetros como la seguridad, la legibilidad, la inmutabilidad de soporte, etc.

La inyección de constructor es un tipo de inyección de dependencia en el marco de Spring que usa un constructor para inyectar dependencia. Las dependencias que se requieren para cualquiera de las clases se especifican como los parámetros del constructor de esa clase específica. La inyección de constructor no permite al desarrollador construir ningún objeto a menos que todas las dependencias estén listas y, por lo tanto, asegura una inyección de dependencias exitosa.

La inyección de setter es un tipo de inyección de dependencia en el marco de Spring que usa métodos de setter para inyectar dependencia. Tiene métodos de establecimiento de la forma setXXX () donde XXX denota una dependencia que inyecta los objetos dependientes en el cliente. Esta forma de resolver la dependencia es muy común en el marco de Spring.

Tabla de comparación entre inyección de constructor e inyección de setter

Parámetros de comparación

Inyección de constructor

Inyección de Setter

Dependencia inyectada Utiliza un constructor. Utiliza métodos setter.
Legibilidad No es muy legible en comparación con el colocador. Es más legible.
Anular propiedad No se puede anular la dependencia. Puede anular ciertas dependencias.
Cambios Siempre crea una nueva instancia de bean. No crea ninguna nueva instancia de bean.
Inmutabilidad Apoya la inmutabilidad. No es compatible.

¿Qué es la inyección de constructor?

La inyección de constructor es una de las formas estándar de resolver la dependencia dentro del marco de Spring, que define estáticamente la lista de dependencias requeridas para las clases asignándolas como parámetros al constructor de la clase. 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. Para asegurar que la dependencia se inyecte por completo, se debe seguir un principio de responsabilidad única, que establece que los miembros deben hacer solo una cosa. El constructor debe mantenerse libre de cualquier otra lógica para que el constructor de las clases sea más rápido y más confiable.

Un hecho importante de la inyección de constructores 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 constructor se usa básicamente en los casos en que existe la necesidad de crear objetos con todas las dependencias. Ésta es la forma más fácil y de aplicación general de implementar las dependencias correctamente.

¿Qué es la inyección de Setter?

La inyección de setter es una de las formas estándar de resolver la dependencia dentro del marco de Spring, que usa los métodos de setter para resolver las dependencias. Los métodos de establecimiento tienen el formato setXXX (), donde XXX 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, se utilizan archivos XML y, 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 hay una necesidad de inyectar un mayor número 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.

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.

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

Conclusión

La conclusión es que ambas formas de inyectar dependencias permiten que sea inyección de constructor o inyección de setter, tienen sus propios pros y contras. Además de eso, Spring no se abstiene de que los desarrolladores utilicen a nadie más que al evaluador. Son libres de usar tanto la inyección de constructor como la inyección de setter en un archivo de configuración de Spring. Lo importante a tener en cuenta al inyectar dependencia es usar la inyección de constructor cuando hay una necesidad obligatoria de crear objetos con todas las dependencias y usar la inyección de setter cuando el número de dependencias es mayor o si hay una necesidad de mejorar legibilidad.

Referencias

  1. https://digitalcommons.calpoly.edu/csse_fac/34/
  2. https://books.google.com/books?hl=es&lr=&id=InfRDwAAQBAJ&oi=fnd&pg=PA63&dq=constructor+injection&ots=Hon_bCw-Kv&sig=VdsD_S0lCfP3D8idI8q4F6RnhoE

Diferencia entre inyección de constructor e inyección de setter (con tabla)