스프링에서 의존성 주입에 사용될 수 있는 어노테이션은 @Autowired, @Resource, @Inject
이렇게 3가지 어노테이션이 있습니다. 이 셋의 차이는 무엇일까요?
저는 스프링을 기반으로 개발을 하고 있지만...
개인적으로 특정 프레임워크에 종속되지 않는 @Inject을 즐겨 사용합니다.
사람 일이란게 언제 어떻게 될 지 모르는 거잖아요 ㅋㅋ
- @AutowiredSpring Framework에서 지원하는 Dependency 정의 용도의 Annotation으로, Spring Framework에 종속적이긴 하지만 정밀한 Dependency Injection이 필요한 경우에 유용하다.
- @ResourceJSR-250 표준 Annotation으로 Spring Framework 2.5.* 부터 지원하는 Annotation이다. @Resource는 JNDI 리소스(datasource, java messaging service destination or environment entry)와 연관지어 생각할 수 있으며, 특정 Bean이 JNDI 리소스에 대한 Injection을 필요로 하는 경우에는 @Resource를 사용할 것을 권장한다.
- @InjectJSR-330 표준 Annotation으로 Spring 3 부터 지원하는 Annotation이다. 특정 Framework에 종속되지 않은 어플리케이션을 구성하기 위해서는 @Inject를 사용할 것을 권장한다. @Inject를 사용하기 위해서는 클래스 패스 내에 JSR-330 라이브러리인 javax.inject-x.x.x.jar 파일이 추가되어야 함에 유의해야 한다.
@Autowired, @Resource, @Inject를 사용할 수 있는 위치는 다음과 같이 약간의 차이가 있으므로 필요에 따라 적절히 사용하면 된다.
- @Autowired : 멤버변수, setter 메소드, 생성자, 일반 메소드에 적용 가능
- @Resource : 멤버변수, setter 메소드에 적용가능
- @Inject : 멤버변수, setter 메소드, 생성자, 일반 메소드에 적용 가능
@Autowired, @Resource, @Inject를 멤버변수에 직접 정의하는 경우 별도 setter 메소드는 정의하지 않아도 된다.
'Dev. Java > Dev.Spring' 카테고리의 다른 글
web.xml url-pattern / 와 /* 의 차이점 (0) | 2016.09.27 |
---|---|
ORM이란 무엇인가? (0) | 2016.03.20 |
스프링 pom.xml에 ojdbc14 추가하기 (0) | 2016.02.29 |
STS로 프로젝트 생성 후, resources 폴더에 새로운 폴더를 생성할 때, 패키지로 보이는 문제 해결 방법 (0) | 2015.03.04 |
쉽게 이해하는 스프링 프레임워크 (0) | 2015.02.14 |