从Spring v4.3.8开始,当Spring尝试加载依赖注入时,我遇到了一个问题。
我想根据T的类型(Debit1或Debit2)调用ManagerImpl1.java或ManagerImpl2.java实现中的“manage”方法。以下是详细信息:
原因: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'com.xxx.xxx.datacollection.infoprod.Manager' available: expected single matching bean but found 2: ManagerImpl1,ManagerImpl2
Business.java :
@Component
public class Business<T extends Debit> {
@Autowired
private Manager<T> manager;
public void treatment(Context<T> context, FindServiceReturnMessage response) {
manager.manage(response, context);
}
Manager.java :
public interface Manager<T extends Debit> {
void manage(final FindServiceReturnMessage response, Context<T> context);
}
ManagerImpl1.java :
@Component
public class ManagerImpl1 implements Manager<Debit1> {
@Override
public void manage(final FindServiceReturnMessage response, Context<Debit1> context) {
}
}
ManagerImpl2.java :
@Component
public class ManagerImpl2 implements Manager<Debit2> {
@Override
public void manage(final FindServiceReturnMessage response, Context<Debit2> context) {
}
}
此外,“Debit1”和“Debit2”实现了接口“Debit”。
我尝试了几种方法,但都没有成功...
@Qualifier
注释,就像这样:@Autowired @Qualifier("ManagerImpl2") private Manager<T> manager;然而,这段代码将始终实现ManagerImpl2而不是ManagerImpl1。 - ClémentApplicationContext.getBean()
方法。这种方法的问题是您不再使用IOC。 - Dimitar Spasovski