这是我的情景。我有两个课程 ClassA 和 ClassB 。 ClassB 继承 ClassA 。
我正在对它们使用@Component
注释使它们成为Spring bean。
@Component
public class ClassA{
// parent
}
@Component
public class ClassB extends ClassA{
// child
}
public class ClassC{
@Autowired
private ClassA classA;
public void doSomething(){
}
}
现在,每当我尝试在 ClassC 中使用@autowired
注释来注入 ClassA 时,如上所示,我会得到以下异常。
没有定义[ ClassA ]类型的唯一bean:预期的单个匹配bean但找到2:[ classA , classB ]
据我所知,当按类型自动连接时,spring会找到两个可分配给 ClassA 的bean,因此会引发异常。
除了使用@Qualifier
注释和按名称自动连接外,还有一种简单的方法可以解决此问题吗?
我可以指示spring不仅要检查可按类型分配的bean,还要检查它是否是完全相同的类类型?
答案 0 :(得分:2)
是的,请使用@Primary
注释。
如果这不可行并且您不想使用@Qualifier,则必须手动解决它。类似的东西:
@Autowired
private List<ClassA> candidates;
private ClassA actual;
@PostConstruct
public void postConstruct() {
for (ClassA candidate : candidates) {
if (AopProxyUtils.ultimateTargetClass(candidate).equals(ClassA.class)) {
actual = candidate;
break;
}
}
org.springframework.util.Assert.notNull(actual , "No bean of exact type ClassA found.");
}