Notice
Recent Posts
Recent Comments
일일구름 IT
[Spring] 의존객체 선택 (@Qualifier, @Named) 본문
의존객체 선택
동일한 객체가 2개 이상인 경우에 스프링 컨테이너는 자동 주입할 객체를 판단하지 못해 Exception이 발생한다.
@Autowired를 이용해 자동주입할 때는 @Qualifier 이용해 이 문제를 해결할 수 있고 @Inject 어노테이션을 이용해 자동주입을 할때엔 @Named를 이용해 해결할 수 있다.
@Qualifier
// WordRegisterServiceUseAutowired.java 파일
public class WordRegisterServiceUseAutowired {
@Autowired
@Qualifier("usedDao")
private WordDao wordDao;
}
// appCtx.xml 파일
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config />
<bean id="wordDao1" class="com.word.dao.WordDao" >
<qualifier value="usedDao"/>
</bean>
<bean id="wordDao2" class="com.word.dao.WordDao" />
<bean id="wordDao3" class="com.word.dao.WordDao" />
</beans>
동일한 객체가 여러개인 경우 자동으로 객체를 주입하고자 하는 property 또는 생성자, 메소드 위에 @Qualifier 어노테이션을 작성하고 @Qualifier 어노테이션에 명시된 속성 값과 xml파일에서 bean 객체에 qualifier 태그를 이용해 설정한 값과 같을 경우 해당 객체를 자동으로 주입한다.
즉, @Qualifier 어노테이션의 값과 bean 객체의 qualifier 태그 값이 같은 경우 해당 bean 객체가 자동주입된다.
@Named
@Autowired와 다르게 @Inject어노테이션을 이용해 자동주입을 할 경우엔 동일한 객체가 2개 이상일때 @Named 어노테이션을 이용해 자동주입 대상 객체를 선택한다.
// WordRegisterServiceUseInject.java 파일
public class WordRegisterServiceUseInject {
@Autowired
@Named(value="wordDao1")
private WordDao wordDao;
}
// appCtx.xml 파일
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config />
<bean id="wordDao1" class="com.word.dao.WordDao" />
<bean id="wordDao2" class="com.word.dao.WordDao" />
<bean id="wordDao3" class="com.word.dao.WordDao" />
</beans>
@Named의 value 속성에 자동주입하고자 하는 bean 객체의 id 값을 넣어주면 value값과 같은 아이디를 가진 bean 객체를 자동주입한다.
'Spring' 카테고리의 다른 글
[Spring] InitializingBean, DisposableBean, init-method, destroy-method (0) | 2023.11.28 |
---|---|
[Spring] 생명주기 (Life Cycle) (2) | 2023.11.28 |
[Spring] 의존객체 자동 주입 (@Autowired, @Resource, @Inject) (0) | 2023.11.09 |
[Spring] bean의 범위 (Prototype) (0) | 2023.11.07 |
[Spring] 스프링 설정 파일 분리 (문자열 배열, import) (0) | 2023.11.07 |