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 프로그래밍 (최범균 저)