DI를 위한 Annotation에 대한 정리이다.


1. @Resource

<property> 선언과 비슷하게 주입할 빈을 id로 지정하는 방법이다. 수정자(setter)뿐만이 아니라 필드에도 붙일 수 있다.


a. 수정자가 있는경우

public class Hello {

private Printer printer;

...

@Resource(name="printer")

public void setPrinter(Printer printer){

this.printer = printer;

}

}


b. 필드에 직접 적용(field injection)

public class Hello {

@Resource(name="printer")

private Printer printer;

...

}


@Resouce Annotation선언에 name Property를 지정하지 않으면 자동으로 Spring이 Bean의 필드명을 가지고 injection을 수행한다.


2. @Autowired / @Inject

@Autowired는 스프링2.5부터 적용된 Annotation이고 @Inject는 JavaEE6의 표준 스펙에서 정의되어 있는것이다.

* 스프링으로 개발한 POJO를 앞으로 다른 환경에서도 사용할 가능성이 있다면 @Inject와 DIJ에서 정의한 애노테이션을 사용하는 게 좋다. 스프링만 사용할 코드라면 어느 것을 선택해도 좋은데, 대신 한 가지 종류만 선택해서 일관되게 사용하자.


@Resource와 다르게 이름 대신 필드나 프로퍼티 타입을 이용해 후보 빈을 찾는다.


생성자(constructor), 필드(field), 수정자 메소드(setter), 일반 메소드(method)에 적용이 가능하다.


@Autowired

Collection<Printer> printers; 


@Autowired

Printer[] printers; 


//이와 같이 Collection에도 적용이 가능하다.



3. @Qualifier

타입 외의 정보를 추가해서 자동와이어링을 세밀하게 제어할 수 있는 보조적인 방법이다.


...


-이 글의 모든 내용은 토비의스프링3(이일민) 책에서 발취하여 내가 보기 좋게 정리한것임.

 

+ Recent posts