In spring, we can auto wire the objects by using the @Autowired annotation. This annotation has the intelligence to detect the most relevant types for the references by looking at the various criteria like variable name, object type, super class, generic type, qualifier, etc. However, in few scenarios it will find the 2 or more beans matching the same filter criteria where it can not inject the object. In those situations you will get the below exception.
Also Read:
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'beans': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: javabeat.net.spring.core.Emp javabeat.net.spring.core.InjectBeans.managerService; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [javabeat.net.spring.core.Emp] is defined: expected single matching bean but found 2: manager,admin at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1180) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:300) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:660) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) at javabeat.net.spring.core.SpringDemo.main(SpringDemo.java:7)
To resolve this exception, you have to provide the clear instructions to the spring container to identify the correct objects. Either you can pass the value to the @Qualifier annotation or make the difference reference names.