- @AutowiredSpring Framework에서 지원하는 Dependency 정의 용도의 Annotation으로, Spring Framework에 종속적이긴 하지만 정밀한 Dependency Injection이 필요한 경우에 유용하다.
의존관계를 자동으로 설정해주는 어노테이션
: 타입을 이용하여 의존객체를 자동으로 설정한다.
: 생성자, 필드, 메서드 세곳에 적용 가능하다.
예) 프로퍼티 설정 메서드 이용
import org.springframework.beans.factory.annotation.Required
public class TestBean {
private TestDao testDao;
@Autowired
public void setTestDao(TestDao testDao) {
this.testDao = testDao;
}
}
위와 같은 경우 testDao프로퍼티에 TestDao 타입의 bean객체를 전달한다.
AutowiredAnnotationBeanPostProcessor 클래스를 설정파일에 빈객체로 등록하면 @Autowired 어노테이션을 이용한 자동설정이 적용된다.
또한 Required어노테이션과 마찬가지로 <context:annotation-config>태그를 사용하면 된다.
@Autowired 어노테이션은 프로퍼티 설정 메서드 뿐 아니라 일반 메서드나 멤퍼필드 자체에 적용시킬수도 있다.
제너릭이 적용된 컬렉션 타입에도 적용시킬 수 있다.
@Autowired 어노테이션은 타입을 이용하여 자동으로 빈객체를 전달하기 때문에 타입에 맞는 객체가 없거나 두개 이상일 경우 예외를 발생시킨다.
@Autowired 어노테이션을 적용한 프로퍼티를 반드시 설정할 필요가 없는 경우에는 @Autowired 어노테이션의 required속성 값을 false로 지정한다.
@Autowired(required=false)
이렇게 지정된 경우에는 해당 타입에 맞는 빈객체가 존재하지 않는다고 해도 예외를 발생시키지는 않는다.
@Qualifier
: 동일한 타입의 빈객체들 중 특정 빈 객체를 자동으로 설정하도록 한다.
: @Autowired 어노테이션과 함께 사용되며 자동 연결될 빈객체의 수식어를 값으로 갖는다.
public class TestBean {
@Autowired
@Qualifier("main")
private TestDao testDao;
}
위 코드에서 수식어구는 main 이고
이러한 수식어는 설정파일에서 <qualifer> 태그를 이용하여 설정한다.
<bean id="testDao" class="lja.test.TestDao">
<qualifier value="main"/>
</bean>
- @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 : 멤버변수, setter 메소드, 생성자, 일반 메소드에 적용 가능
- @Resource : 멤버변수, setter 메소드에 적용가능
- @Inject : 멤버변수, setter 메소드, 생성자, 일반 메소드에 적용 가능
※ spring 3.0 공부 중에 책의 설명을 보면 @Autowired @Resource 두개 모두 내가보기엔 똑같은 연결을 한다.(내 생각일뿐...)
이해가 안되서 인터넷 뒤져서 설명을 찾긴 했는데... 그래도 큰 차이점을 모르겠다. 그냥 일반메소드에는 @Resource 가
적용이 안된다는 점정도? 아직 부족한가보다...
'공부 > SPRING(3.0)' 카테고리의 다른 글
SPRING_[ @ModelAttribute 어노테이션 이용한 모델 데이타 처리 ] (0) | 2013.03.21 |
---|---|
SPRING_[ 캐릭터 인코딩 처리필터 설정 ] (0) | 2013.03.19 |
SPRING_[ @어노테이션별 BeanPostProcessor ] (0) | 2013.03.18 |
SPRING_[ InitializingBean Interface ] (0) | 2013.03.18 |
SPRING_[ 부모 빈을 통한 설정 재사용 ] (0) | 2013.03.18 |