일일구름 IT

[Spring] 의존객체 선택 (@Qualifier, @Named) 본문

Spring

[Spring] 의존객체 선택 (@Qualifier, @Named)

일구름 2023. 11. 11. 17:53

의존객체 선택

동일한 객체가 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 객체를 자동주입한다.