Spring
[Spring] @Qualifier 어노테이션
재담
2022. 2. 11. 01:24
@Qualifier 어노테이션을 이용한 자동 설정 제한
동일한 타입의 빈 객체를 두 개 이상 정의한 뒤 @Autowired 어노테이션을 적용할 경우 NoUniqueBeanDefinitionException을 발생시킨다. 이럴 때는 한정자(qualifier)를 지정해서 빈 객체의 범위를 좁혀야 한다. XML 설정에서는 <qualifier> 태그를 이용해서 한정자를 지정하며, 자바 설정에서는 @Qualifier 어노테이션을 이용해서 한정자를 지정한다.
<bean id="orderSearchClientFactory"
class="[패키지경로].SearchClientFactoryBean">
<qualifier value="order" />
...
</bean>
@Configuration
public class ConfigShop {
@Bean
@Qualifier("order")
public SearchClientFactoryBean orderSearchClientFactory() {
SearchClientFactoryBean searchClientFactoryBean = new SearchClientFactoryBean();
...
return searchClientFactoryBean;
}
// 이하 생략
...
}
마찬가지로 @Autowired 어노테이션을 사용하는 코드도 @Qualifier 어노테이션을 이용해서 사용할 의존 객체를 한정 지을 수 있다.
public class OrderService {
private ErpClientFactory erpClientFactory;
@Autowired
@Qualifier("order")
private SearchClientFactory searchClientFactory;
// 이하 생략
...
}
@Autowired 어노테이션이 적용된 메서드나 생성자가 두 개 이상의 파라미터를 갖는 경우에는 파라미터에 @Qualifier 어노테이션을 적용한다.
public class OrderService {
private ErpClientFactory erpClientFactory;
private SearchClientFactory searchClientFactory;
@Autowired
public void setSearchClientFactory(ErpClientFactory erpClientFactory,
@Qualifier("order") SearchClientFactory searchClientFactory) {
this.erpClientFactory = erpClientFactory;
this.searchClientFactory = searchClientFactory;
}
// 이하 생략
...
}
Reference
- 웹 개발자를 위한 Spring 4.0 프로그래밍 (최범균 저)