I am getting the below exception when I am deploying the code
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.belk.api.adapter.contract.Adapter] is defined: expected single matching bean but found 2: [endeca, solar]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:800)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:707)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478)
... 64 more
I have 3 different projects one is Common, second is Adapter and the third is Service. The adapter is dependent on Common and Service is dependent on Adapter. All three are maven projects. Now in my Common project I have an interface called CommonAdapter.java
public interface CommonAdapter {
List service() ;
}
I have a class called AdapterFactory.java in the same project (i,e Common)
@Component
public class AdapterFactory {
@Autowired
Adapter adapter;
public Adapter getAdapter(String adapterName){
return adapter;
}
}
<context:component-scan base-package="com.test.api" />
<bean
class="org.springframework.beans.factory.config.ServiceLocatorFactoryBean"
id="adapterFactory">
<property name="serviceLocatorInterface" value="com.test.api.adapter.manager.AdapterFactory">
</property>
</bean>
Now in my Adapter Project, I have the implementation classes for CommonAdapter.java One is EndecaAdapetr.java and the other is SolarAdapter.java
@Component("endeca")
public class EndecaAdapter implements Adapter {
List service() {
// My bussiness logic
}
}
@Component("solar")
public class SolarAdapter implements Adapter {
List service() {
// My bussiness logic
}
}
Now in my Service project, want to invoke the service method of the above two classes based on the input.
public class ProductSearchServiceImpl {
@Autowired
private AdapterFactory adapterFactory;
public Search searchProducts(){
Adapter endecaAdapter = this.adapterFactory
.getAdapter("endeca ");
}
}