※ 참조 : 프로스프링3
DI(Dependency Injection)는 IoC(Inversion of Control)의 특수한 형태다.
컴포넌트 의존성을 제공하는 간단한 메커니즘을 제공하고 생명주기를 통해 의존성을 관리한다.
IoC -> 의존성 주입 / 의존성 룩업
의존성 주입 -> 생성자 의존성 주입 / 세터 의존성 주입
의존성 룩업 -> 의존성 풀 / CDL
○ 의존성 풀
public static void main(String[] args) thorws Exception {
BeanFactory factory = getBeanFactory();
MessageRenderer mr = (MessageRenderer) factory.getBean("renderer");
mr.render();
}
○ 컨텍스트화된 의존성 룩업 (CDL)
public interface ManagedComponent {
public void performLookup(Container container);
}
public interface Container {
public Object getDependency(String key);
}
public class ContextualizedDependencyLookup implements ManagedComponent {
private Dependency dependency;
public void performLookup(Container container) {
this.dependency = (Dependency) container.getDependency("myDependency");
}
}
컨테이너가 컴포넌트로 의존성을 넘겨줄 준비가 되면, 컨테이너는 각 컴포넌트에 대해 차례로 performLookup()을 호출한다.
○ 생성자 의존성 주입
public class ConstructorInjection {
private Dependency dependency;
public ConstructorInjection(Dependency dependency) {
this.dependency = dependency;
}
}
○ 세터 의존성 주입
public class SetterInjection {
private Dependency dependency;
public void setDependency(Dependency dependency) {
this.dependency = dependency;
}
}
컴포넌트의 의존성을 생성자에 제공한다. 컴포넌트는 의존성을 인자로 받는 생성자를 선언하고, IoC컨테이너는 컴포넌트 인스턴스를 생성할 때 컴포넌트로 의존성을 넘겨준다.
---------------------------------------------------------------