public interface MyInterface {
public void doSomething();
}
public class MyInterfaceImpl implements MyInterface {
public void doSomething() {
System.out.println("ok");
}
}
public class MyClass {
private MyInterface obj;
public MyClass(MyInterface obj) {
this.obj = obj;
}
public MyMethod() {
obj.doSomething();
}
}
我已经在构造函数中注入了一个接口。我该如何使这个样本有效? IoC容器如何实现接口实现并允许我使用obj.doSomething? 我读过有关Spring的文档,但很难理解。
答案 0 :(得分:1)
Spring需要几件事来使DI按预期工作,基本:
您的实施必须提供这些要求,
对于第一个和As @JB Nizet,你可以使用java(@Component
,@Repository
...或者xml方法来使spring知道bean,
在哪里注入bean有点棘手,因为如果你有单一的接口实现,spring可以很容易地知道下划线实现,因为默认的自动装配是技术类型MyInterfaceImpl
类型{{1} },(这是纯粹的java接口逻辑,MyInterfaceImpl的类型是MyInterface
和MyInterfaceImpl
两者)然后你可以简单地请求spring使用@Autowired注入bean
MyInterface
但是如果你有一个以上的实现,你将以两个类型为@Autowired
private MyInterface obj
的bean结束,并且会发生异常,因为spring无法决定注入哪个实现,并且感觉,为了解决这种歧义,你可以提供例如MyInterface
以通过特定的bean名称进行注入,例如here