@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
  •  | 
  •  

Question

@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

Was it helpful?

Solution

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
   }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top