Header Ads Widget

Ticker

6/recent/ticker-posts

Spring Injection Types

Spring admite tres tipos de inyecciones de dependencia:

Inyección de constructor

01
02
03
04
05
06
07
08
09
10
@Component
public class SecondBeanImpl implements SecondBean {
 
    private FirstBean firstBean;
 
    @Autowired
    public SecondBeanImpl(FirstBean firstBean) {
        this.firstBean = firstBean;
    }
}

Eso es similar a:

1
2
FirstBean firstBean = new FirstBeanImpl();
SecondBean secondBean = new SecondBeanImpl(firstBean);

Este tipo de inyección de dependencia crea una instancia e inicializa el objeto.
En este enfoque, los beans son inmutables y las dependencias no son nulas. Sin embargo, si define muchos parámetros en el constructor, su código no está limpio.
Desde Spring 4.3, la anotación @Autowired no es necesaria si la clase tiene un solo constructor.

Inyección de setter

01
02
03
04
05
06
07
08
09
10
@Component
public class SecondBeanImpl implements SecondBean {
 
    private FirstBean firstBean;
 
    @Autowired
    public setFirstBean(FirstBean firstBean) {
        this.firstBean = firstBean;
    }
}

Eso es similar a:

1
2
3
FirstBean firstBean = new FirstBeanImpl();
SecondBean secondBean = new SecondBeanImpl();
secondBean.setFirstBean(firstBean);

En este enfoque, los beans no son inmutables (el setter podría ser llamado más tarde), y las dependencias no obligatorias pueden conducir a NullPointerExceptions.

Inyección de campo

1
2
3
4
5
6
@Component
public class SecondBeanImpl implements SecondBean {
 
    @Autowired
    private FirstBean firstBean;
}

Este enfoque puede parecer más limpio, pero oculta las dependencias y dificulta las pruebas. Mientras que las inyecciones de constructor y colocador usan proxies, la inyección de campo usa reflexión que podría afectar el rendimiento. Podría usarse en clases de prueba.

Publicar un comentario

0 Comentarios