Red de conocimiento informático - Conocimiento del nombre de dominio - Comparación de tres métodos comunes de inyección de anotaciones

Comparación de tres métodos comunes de inyección de anotaciones

java

El método de inyección de campos es el más utilizado porque es muy sencillo de utilizar y el código es más conciso.

java

Cuando se lanzó Spring 3.x por primera vez, los funcionarios de Spring recomendaron usar el método de inyección Setter al comparar la inyección del constructor y la inyección Setter:

Spring 3. x ¿DI basada en constructor o DI basada en Setter?

Esto significa que los parámetros del constructor pueden inflarse cuando se inyectan mucho, especialmente cuando los parámetros son opcionales, mientras que la inyección del método Setter permite que la clase sea reconfigurada y reinyectada más tarde

; p>

java

En Spring 4.x, al comparar la inyección de constructor y la inyección de setter, Spring recomienda oficialmente la inyección de constructor:

Spring 4.x se basa en Constructor o Setter -DI basado?

Debido a que los componentes inyectados mediante constructores son inmutables, los componentes no se pueden inyectar utilizando DI basada en setter. es inmutable y garantiza que las dependencias requeridas no sean nulas. Además, los componentes inyectados con constructores siempre se pueden devolver al cliente (llamador) en un estado completamente inicializado, un constructor con una gran cantidad de parámetros indica que puede contener demasiadas responsabilidades y viola el principio de responsabilidad única, por lo que se recomienda; para refactorizar el código, separar las responsabilidades en ubicaciones apropiadas.

Al comparar la inyección del método setter y la inyección del constructor, el segundo párrafo de la documentación oficial de Spring se cita por separado, que describe las características de las alternativas al método recomendado.

En Spring 3.x, Spring recomienda la inyección del método Setter, mientras que el segundo párrafo establece que algunos puristas prefieren la inyección basada en constructor. Proporcionar todas las dependencias de objetos significa que el objeto siempre se devuelve al código del cliente (de llamada) en un estado completamente inicializado. La desventaja de esto es que los objetos se reconfiguran y reinyectan con menor facilidad.

En Spring 4.x, Spring recomienda el uso de la inyección de constructor, y el segundo párrafo establece que la inyección de Setter debe usarse principalmente para dependencias opcionales a las que se les pueden asignar valores predeterminados razonables en la clase. De lo contrario, se deben realizar comprobaciones no nulas siempre que su código utilice dependencias. Un beneficio de la inyección de setter es que los métodos de setter se pueden reconfigurar o reinyectar posteriormente en el objeto de clase.

La inyección de Setter debe usarse para dependencias opcionales. Esta clase debería funcionar bien si no se proporcionan estas dependencias. Las dependencias se pueden cambiar en cualquier momento después de crear una instancia de un objeto.

La inyección de constructores ayuda a reforzar las dependencias. Al proporcionar dependencias en el constructor, se asegura de que los objetos dependientes estén disponibles una vez completada la construcción. Los campos asignados en el constructor también pueden ser finales, lo que haría que el objeto fuera completamente inmutable, o al menos protegería sus campos obligatorios.

La inyección de constructor también evita el problema de dependencia circular de la inyección de campo, como inyectar Beta en Alpha y luego inyectar Alpha en Beta. Si utiliza la inyección de constructor, recibirá la siguiente BeanCurrentlyInCreationException al iniciar Spring para advertir sobre dependencias circulares.

Referencia:

blogs.com/zhangshuaiyin/p/15035887.html.