'Autowired'에 해당되는 글 1건

빈설정에서 annotation 과 component-scan의 base-package를 선언해주고 autowire="byType"(선언을 안할경우 default byType) 으로 설정하면 인스턴스명으로 특정 클래스에 Injection 을 하지 않고 타입을 찾아서 하게 된다.

예를 들어

CustomerManager 가 CustomerService에 대해 Dependency를 가지고 있을경우 다음과 같이 선언했다고 해보자.

CustomerManager.java

public class CustomerManager {

@Autowired

private CustomerService customerService;

.....

}

CustomerService.java

@Component

public class CustomerService {

}


xml 파일 설정

<bean name="customerManager"

class="com.bizuma.test.customer.CustomerManager"

autowire="byType" />


<bean name="customerXX" class="com.bizuma.test.customer. CustomerService" />


클라이언트 테스트클래스를 하나 만들어서 해당 빈을 로드하게 되면 문제없이 Injjection이 성공하게 된다. 하지만 CustomerManager 의 CustomerService인스턴스인 customerService인스턴스 명을 customerServices 라고 선언할경우 다음과 같은 오류가 발생한다.


 org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.bizuma.test.customer. CustomerService] is defined: expected single matching bean but found 2: customerServices, customerXX

문제는 bean 설정파일에서 bean name을 customerXX로 해서 문제가 발생하는 것이 아니라 CustomerService의 인스터스명끝에 "s"를 하나 더 붙여서 나는 것이다. 

내가 알지 못하는 무언가가 있는것인가 아니면 byType이어도 인스턴스 명명규칙은 지켜줘야 하는것인가.

블로그 이미지

비추마

,