@Autowired by constructor looks for beans by type. How to inject a bean by name to a constructor using autowired annotation

StackOverflow https://stackoverflow.com/questions/19878266

  •  30-07-2022
  •  | 
  •  

문제

@Autowired by constructor looks for beans by type. How to inject a bean by name to a constructor using autowired annotation? I have 2 beans of same type but I need to inject it to constructor of another same class based on the bean name. How do I do it?

XML:

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

Java:

Class C {

   private Check check;

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

  }

When I do this I get an exception telling me that I have 2 beans of same type check but it requires there to be just one bean of that type. How can I inject the bean with id="B" into this class C through constructor injection?

In my applicationContext.xml I have mentioned autowire="byType". I need to autowire byName only in this particular class rest all it needs to be autowired by Type only

도움이 되었습니까?

해결책

You should use @Qualifier annotation with your target bean id for constructor parameter.

<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
   }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top