Primavera de anotación Tipo Obligatorio se marca como obsoleta
Obsoleto. como de 5,1, en favor del uso de la inyección de constructor para los ajustes necesarios (o una implementación personalizada InitializingBean)
Lo mismo para relevante RequiredAnnotationBeanPostProcessor
Sin embargo, no está claro cuál es la sustitución, parece que debería estar disponible.
Este cambio se impedirnos marcando método como se requiere a menos que sea parte del método constructor? para evitar excepciones inesperadas en la creación de la clase?
Hay tres formas de inyectar a través de un grano de anotación:
El campo de la inyección
@Autowired
private FooService fooService;
inyección de setter
private FooService fooService;
@Autowired
public void setFooService(FooService fooService) {
this.fooService = fooService
}
Inyección de constructor (este es el mencionado reemplazo)
private final FooService fooService;
@Autowired
public MyComponent(FooService fooService) {
this.fooService = fooService;
}
Como se puede ver, la única manera de declarar su servicio final
es mediante el uso de la inyección de constructor, que sustituye a la @Required
anotación ya que obliga al usuario de su clase para crear una instancia con los servicios requeridos. El usuario no tiene por qué ser la primavera, podría ser una prueba de unidad simple también.
Debe utilizar la inyección de constructor para las dependencias obligatorias y incubadora inyecciones de dependencias opcionales en lugar de la inyección campo. Algunas de las razones:
- Esto hace que sea claro para todos los que se requieren dependencias
- Esto hace más fácil la prueba
- Usted puede hacer sus objetos inmutables
Otras lecturas: