반응형

JAVA 기반의 웹서비스 개발을 하는 사람이라면 Spring을 떼어낼 수 없습니다. 그리고 누구나 @Autowired를 최소한 한 번쯤은 사용하고 있습니다. 하지만 보통 크게 관심을 갖지 않으면 “IoC 개념을 구현한 Spring-Container의 Dependency-Injection을 사용했다.” 라는 정도만 숙지하고 사용하게 됩니다. 바로 아래의 가장 초보적인 예제로 말이죠.


ex) 가장 초보적인 @Autowired 사용예제.

public class MyTest {

@Autowired MyService1 myService1;

}


조금 익숙해 지게 되면 다음과 같이 constructor 또는 setter 를 사용하여 확장하게 됩니다. @Autowired 는 기본적으로 byType으로 bean을 찾고 못 찾으면 byName으로 찾습니다.  그리고 필수적인 속성들은 생성자로 그렇지않은 것은 메서드로 생성하기도 합니다.


ex) constructor 또는 setter 를 사용한 @Autowired 사용예제.

public class MyTest {

MyService2 myService2;

MyService3 myService3;


@Autowired

public MyTest(MyService2 myService2) {

this.myService2 = myService2;

}


@Autowired(required=false)

public void setMyService3(MyService3 myService3) {

this.myService3 = myService3;

}

}


우리가 이와 같이 사용하는 Spring의 @Autowired 와 관련있는 DI 의 히스토리와 개념에 대해 짚고 넘어 가도록 하겠습니다. IoC(Inversion of Control)의 한 형태인  DI(Dependency-Injection)는 2004년부터 자바개발의 중요한 프로그래밍 패러다임이 되었습니다. Spring 뿐만 아니라 Guice 프레임워크 등에서 DI를 구현해 왔는데요. 다양한 프레임워크에서 각자의 방향으로 발전하다가  SpringSource의 Rod-Johnson 과 Guice 를 발표한 Bob-Lee가 2009년5월 함께 표준-DI 인터페이스 JSR-330을 작업하기로 발표한 후 몇 달만에 final을 내놓게 되었습니다..(링크)


 Martin-Fowler 의 말을 빌리면 IoC 는 Concept 이고 DI는 Pattern 이라는 설명을 하기도 했고, IoC 를 실제 구현한 것들이 DI를 포함하여 많은 분들께 익숙한 Factory-Pattern과 Service-Locator-Pattern 등이 있습니다.


... ING~~


PrototypeBean의 Dependency-Lookup 의 전략들..

1. ObjectFactory

2. ServiceLocatorFactoryBean

3. Provider<T>

4. @Lookup




reference) https://martinfowler.com/articles/injection.html  

반응형

+ Recent posts