2013-11-09 5 views
15

@Autowired by bean은 유형별로 bean을 찾습니다. autowired annotation을 사용하여 생성자에 bean을 이름으로 삽입하는 방법은 무엇입니까? 동일한 유형의 2 개의 bean이 있지만 bean 이름을 기반으로 다른 동일한 클래스의 생성자에이를 주입해야합니다. 어떻게해야합니까?@Autowired by 생성자는 유형별로 빈을 찾습니다. autowired annotation을 사용하여 생성자에 이름으로 bean을 삽입하는 방법 생성자에 의한

XML :

<bean id="A" class="com.Check"/> 
<bean id="B" class="com.Check"/> 

자바 : 나는이 작업을 수행 할 때

Class C { 

    private Check check; 

    @Autowired 
    public C(Check check){ 
     this.check = check 
    } 

    } 

나는 동일한 유형 검사 2 콩을 가지고 있지만 그것은 단지 하나의 콩이있을 필요하다고 말해 예외가 그 유형의. 생성자 주입을 통해 id="B" 빈을이 클래스 C에 어떻게 주입 할 수 있습니까?

applicationContext.xml에서 나는 autowire="byType"을 언급했습니다. 이 특정 클래스에서만 나머지 byName을 autowire해야합니다. 나머지는 모두 autowired해야합니다. 유형 만 해당

답변

18

생성자 매개 변수에 대상 빈 ID와 함께 @Qualifier 주석을 사용해야합니다.

<bean id="A" class="com.Check"/> 
<bean id="B" class="com.Check"/> 

Class C { 

    private Check check; 

    @Autowired 
    public C(@Qualifier("A") Check check){ //<-- here you should provide your target bean id 
     this.check = check 
    } 
} 
+0

아직 작동하지 않습니다. 제가 사용 @Autowired \t 공개 CheckDAO (@Qualifier ("위해 entityManager")의 EntityManagerFactory의 EntityManagerFactory) { \t \t \t \t 안에 entityManagerFactory.createEntityManager을 =(); \t \t} 메신저 예외. org.springframework.beans.factory.BeanCreationException : 'checkDAO'라는 이름으로 빈을 생성하는 중 오류가 발생했습니다 : 지속성 종속성을 주입하지 못했습니다. 중첩 예외는 org.springframework.beans.factory.NoSuchBeanDefinitionException : [javax.persistence.EntityManagerFactory] 유형의 한정된 bean이 정의되지 않았습니다 : 예상 된 단일 bean이지만 found 2 – user2972319

+0

죄송합니다. – user2972319