【发布时间】:2015-10-09 11:32:01
【问题描述】:
我有一个实现两个接口的 bean。准系统代码如下:
interface InterfaceA {
...
}
interface InterfaceB {
...
}
public class ClassC implements InterfaceA, InterfaceB {
...
}
在我的 AppConfig 中,我指定了以下内容:
@Bean(name = "InterfaceA")
public InterfaceA interfaceA() {
return new ClassC();
}
@Bean(name = "InterfaceB")
public InterfaceB interfaceB() {
return new ClassC();
}
我是这样使用它的:
public class MyClass {
@Inject
private final InterfaceA a;
public MyClass(@Named("InterfaceA") InterfaceA a) {
this.a = a;
}
...
}
但是,Spring 抱怨说:
没有符合条件的 bean 类型 [com.example.InterfaceA] 是 已定义:预期的单个匹配 bean,但找到了 2: 接口A、接口B
针对 EJB here 提出并回答了类似问题,但我找不到 Spring bean 的任何内容。有人知道原因吗?
解决方法是引入一个扩展InterfaceA 和InterfaceB 的新接口,然后让ClassC 实现它。但是,由于框架限制,我不愿意改变我的设计。
【问题讨论】:
-
为什么...只需创建
ClassC的单个实例... 方法的返回类型在这里无关紧要,因为bean 将是InterfaceA和InterfaceB。你不需要额外的接口...
标签: java spring dependency-injection inject