¿Qué estilo de inyección se recomienda en general en Spring?
Opciones
- Inyección por campo con
@Autowireden los campos - Inyección por constructor con campos final (Opción correcta)
- Inyección por setter en cada bean opcional
- Campos static que asigna el contenedor
Respuesta
Inyección por constructor
Por qué
Se prefiere la inyección por constructor porque:
- Las dependencias pueden ser
final, así que el objeto siempre queda completo. - Es obvio lo que necesita una clase (mira el constructor).
- Los unit tests pueden crear la clase con
newy pasar mocks, sin Spring. - Las dependencias circulares aparecen de inmediato.
La inyección por campo oculta las dependencias y necesita reflection o Spring para probarse. Con un solo constructor ni siquiera necesitas @Autowired.
Recuerda
Prefiere la inyección por constructor.