Search Results for 'Setter Injection 차이'

2 POSTS

  1. 2006.10.30 Types of Inversion of Control 1
  2. 2006.10.18 Dependency Injection for Loose Coupling - Spring .net

Types of Inversion of Control

Posted 2006. 10. 30. 23:22
이전에 보았던 책인데 다시 보고 조금 정리 중입니다. ^^


Types of Inversion of Control - proSpring에서 인용함.


* Dependency Lookup comes in two types:
  1. Dependency Pull
  2. Contextualized Dependency Lookup (CDL).
* Dependency Injection also has two common flavors:  물론 메서드 인젝션도 있음
  1. Constructor Dependency Injection
  2. Setter Dependency Injection.


1-1. Dependency Pull
public static void main(String[] args) throws Exception {
 
       // get the bean factory
       BeanFactory factory = getBeanFactory();
 
       MessageRenderer mr = (MessageRenderer) factory.getBean("renderer");
       mr.render();
}

EJB개발을 하면서 저런 스타일은 많이 봐온 스타일이다 (JNDI Look Up) . 즉 이미 익숙한 패턴인것이다.
이것을 IOC 입장에서 설명하면 Dependency Pull 이다.


1-2. Contextualized Dependency Lookup (CDL)

public interface ManagedComponent {
 
  public void performLookup(Container container);
}

보는바와 같이 인터페이스에 1-1 처럼 레파지토리가 아니고 Context를 이용하는게 보인다.

2-1 Constructor Dependency Injection
public class ConstructorInjection {
 
  private Dependency dep;
 
  public ConstructorInjection(Dependency dep) {
       this.dep = dep;
  }
}

보는 바와 같이 Constructor를 이용하고 있다.
Constructor의 Argument를 이용하고 있다.
어느때 Constructor IoC를 쓰고 Setting IoC를 이용할지는 http://itgs.tistory.com/71
에 많은 자료를 두었다.

2-2 Setter Dependency Injection.

public class SetterInjection {
 
  private Dependency dep;
 
  public void setMyDependency(Dependency dep) {
       this.dep = dep;
  }
}

Spring Framework에서 가장많이 쓰이는 Injection이다. 일반적으로 java bean의 Set 메서드형태이며 configuration을 이용해서 객체를 할당한다.
http://itgs.tistory.com/71 에 가면 좀더 많은 자료가 있다. 물론 .net버전의 Spring에 대한 자료이지만 개념적으로 좀더 잘 설명이 되어 있어

Lookup 기반의 컴포넌트를 제작하게 되면 나중에 Test하기가 나빠진다.
WAS환경과 똑같이 만들기가 힘들다. 그러나 이미 많은 사람들도 알다시피...
IoC덕택에 pico Container 덕택에 Testing을 자동화하고 가상 객체들을 쓰는데 익숙해지게 된다. 이러한 것이 스프링 프레임워크의 특징이며 컨테이너라는 용어를 가져다 칭할수 있는 것이다.

요즈음 pro Spring을 다시 보고 있다. IT거버넌스를 하는데 pro Spring을 보냐고 묻는 사람들도 많이 있지만.... 일단 재미도 있기도 하고....
자세히 알만한것들은 몇가지 자세히 기술을 알 필요가 있기에 그렇다.
3년전인가... Spring을 이용해서 모 사이트를 구축했는데...
아직도 그것이 잘 이해 되지 않은 상태에서 구축되어 아쉬움이 많이 남는다.
아키텍처가 좋다 나쁘다는 말하기 힘들겠지만....

(실제 나는 나쁜 아키텍처가 존재한다고 생각하지는 않는다.)


Spring Framework은 EJB를 연동시 자신의 메커니즘(스프링이 컨테이너임을 좀더 인지한다면 IoC의 개념을 최대한 사용해야 했었다. )을 최대한 사용해야 한다.


아래의 자료는  DI에 대해서 구체적으로 잘 설명된 자료임.참조자료 ^^




Constructor Injection과 Setter Injection의 차이를 잘 설명하고 있다. 출처는
http://www.codeproject.com/cs/design/DependencyInjection.asp
이며 저 아래 보면
AOP에 대해서 나온다. 이러한 코드에 대한것들은 주로 .NET 이며
현 코드는 Spring .net 이다. java와 거의 다르지 않으므로 좋은 기사가 될듯 ^^


ps : 아래는 Spring java 버전의 글이지만...별다른 다른 점은 없음

Rod Jonson의 홈페이지에도 몇몇 글이 있다. 비교하면서 보면 좋을듯 ^^
(이젠 다른사이트에 블로그를 올린다. 오래된 블로그임)
http://blog.springframework.com/rod/?p=1




Pojo In Action에도 몇몇 글이 나온다. 빈을 어케 하는지에 대해서 나오는데
약간 설명한것 여기 소개하면 여기서는 constructor injection을 쓴다. 이유는 있다.
http://www.developer.com/java/ejb/print.php/3594121
이다.

자러가야지...졸리네...

http://www.theserverside.com/news/thread.tss?thread_id=34167 요것도 좋은글
http://forum.springframework.org/showthread.php?t=23139
링크하나더