본문 바로가기

테크/기타

스프링공부 - IoC, DI (#1)


※ 참조 : 프로스프링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컨테이너는 컴포넌트 인스턴스를 생성할 때 컴포넌트로 의존성을 넘겨준다.


---------------------------------------------------------------