자동 주입 기능을 사용하는 것은 매우 간단하다. 다음의 두가지만 사용하면 된다.
1.자동 주입 대상에 @Autowired 어노테이션 사용.
2.XML 설정에<context:annotation-config/>설정 추가
위 두가지를 하면, @Autowired가 적용된 의존 주입 대상에 대해서는 <property>태그나 <constructor-arg>태그를 사용하지 않아도 스프링이 알맞게 의존객체를 주입한다.
ex)예시
위의 xml파일에 bean을 등록한것처럼 빈등록만 한다면 <property>태그나 <constructor-arg>태그를 사용하지 않아도 된다. 빈으로 등록한 memberDao를 이용하여 다른클래스에선 똑같이 그냥 빈만 등록하고 그 클래스에서 의존을 주입하고싶은 빈 대상이 있을경우 @Autowired로 자동 의존 주입하면 된다.
1.
2.
여기서, 만약 동일한 타입을 가진 빈 객체가 두개가 있다면 @Autowired 어노테이션은 어떻게 작동할까?
appCtx.xml
MemberinfoPrinter
MemberInfoPrinter 클래스의 setPrinter()메서드는 Memberprinter타입의 의존 객체를 자동 주입 받기 위해 @Autowired를 사용했다. 그런데 설정을 보면 MemberPrinter타입의 빈이 두개가 존재한다. 이 경우,스프링은 "print1"빈과 "print2"빈중 어떤 빈 객체를 MemberInfoPrinter 빈에 주입해야 할지 알 수 없어서 스프링 컨테이너를 초기화하는 과정에서 익셉션을 발생시킨다.
이러한 문제를 해결하기위해
@Qualifier 어노테이션을 지원한다.
다음 두가지의 작업을 통해서 @Qualifier 어노테이션을 사용할수있다.
1.
~~.xml
2.
다음과같이 설정을 해주면 @Qualifier의 값으로 "sysout"을 지정한다.
@Qualifier어노테이션을 사용할때 주의할 점은 @Qualifier에 지정한 한정자 값을 갖는<bean> 객체가 존재하지 않으면 주입할 객체를 찾지 못해 익셉션이 발생한다는 점이다. 예를 들어, 앞서 @Qualifier 어노테이션을 이용해서 한정하는 값을 설정했는데, 다음설정과 같이 XML설정에서 일치하는 <qualifier>태그를 가진 빈 객체가 존재하지 않는경우 스프링 컨테이너를 생성하는데 실패하게 된다.
@Autowired 어노테이션의 적용 순서
지금까지 @Autowired 어노테이션을 적용했을 때 주입할 객체를 어떻게 찾는지 설명했는데, 실제 의존 객체를 찾는 순서를 정리해보면 다음과 같다.
1. 타입이 같은 빈 객체를 검색한다. 한개면 그 빈 객체를 사용한다. @Qualifier가 명시되어 있을 경우, @Qualifier와 같은 값을 갖는 빈 객체여야 한다.
2. 타입이 같은 빈 객체가 두 개 이상 존재하면, @Qualifier로 지정한 빈 객체를 찾는다. 존재하면, 그 객체를 사용한다.
3.타입이 같은 빈 객체가 두 개 이상 존재하고 @Qualifier가 없을 경우, 이름이 같은 빈 객체를 찾는다. 존재하면, 그 객체를 사용한다.
'JAVA HTML JAVASCRIPT > 소오스' 카테고리의 다른 글
구글 차트 api (0) | 2020.03.30 |
---|---|
@Resource (0) | 2020.03.25 |
jQuery / Method / .each() (0) | 2020.03.20 |
jQuery / Method / .children() (0) | 2020.03.20 |
jQuery / Method / .find() (0) | 2020.03.20 |