Spring Dependency Injection(DI)
업데이트:
Dependency Injection(DI) 1
- 구체적인 의존 오브젝트와 그것을 사용할 주체, 클라이언트를 런타임 시에 연결해주는 작업이다.
- Constuctor Injection을 기반으로 Optional한 경우 Setter Injection을 활용 하는 것을 지향한다.
- Field Injection은 final keyword를 사용 할 수 없어 가변적이고, 해당 클래스를 바로 Instance화 시킬 수 없는 등의 문제로 인해서 안티패턴으로 사용을 지양해야 한다.
public class BeanObject {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class OtherBeanObject {
private BeanObject beanObject;
public BeanObject getBeanObject() {
return beanObject;
}
public void setBeanObject(BeanObject beanObject) {
this.beanObject = beanObject;
}
}
Field Injection
@Component
public class FieldInjection {
@Autowired
private BeanObject beanObject;
}
Setter-based Injection
@Component
public class SetterInjection {
private BeanObject beanObject;
// Inject to field variable using Setter Injection.
@Autowired
private void setBeanObject(BeanObject beanObject) {
this.beanObject = beanObject;
}
// Inject into the parameter of the method using Setter Injection.
@Bean
private OtherBeanObject otherBeanObject(@Qualifier("beanObject") BeanObject beanObject) {
OtherBeanObject otherBeanObject = new OtherBeanObject();
otherBeanObject.setBeanObject(beanObject);
return otherBeanObject;
}
}
Constuctor-based Injection
@Component
public class ConstructorInjection {
private BeanObject beanObject;
// @Autowired
// Constructor dependency injection can omit @Autowired from Spring 4.3.
public ConstructorInjection(BeanObject beanObject) {
this.beanObject = beanObject;
}
}
댓글남기기