依赖注入接口
问题描述:
我有以下的代码结构:依赖注入接口
interface Shape {
public void draw();
}
class Triangle implements Shape {
public void draw() {
//Draw Triangle
}
}
class Circle implements Shape {
public void draw() {
//Draw Circle
}
}
class Drawing { private Shape shape;
public Shape getShape() {
return shape;
}
public void setShape(Shape shape) {
this.shape=shape;
}
}
class App {
public static void main(String args[]) {
ApplicationContext context = new ClassPathXMLApplicationContext("spring.xml");
Drawing drawing = context.get("drawing");
drawing.draw(); // I want to automatically inject Triangle as default shape inside this drawing object.
}
}
即使我定义spring.xml豆,怎么能程序知道挑选哪个绘制形状。圆形或三角形如何被注入图动态。
答
即使我在spring.xml中定义了bean,程序如何知道 要为Drawing绘制哪个形状。一个圆形或三角形如何动态地注入到绘图中? ?
没有,在你的xml
(或通过注释)将为你提供像Triangle
使容器可以注入到你的Drawing
类,实现类像图所示:
<bean id="shape" class="com.myproject.Triangle"/> <!--Triangle is concrete class-->
一个更重要的一点你可能会感兴趣的是,如果有多个可用的实现类(对于一个接口),那么你需要告诉Spring容器注入哪个实现需要被选择&。 Spring为此提供了各种选项,如@Primary
或@Qualifier
等。通过这些选项,您可以告诉容器哪些实现需要使用。
你的问题不清楚。有些东西必须决定注入哪种形状。你不能注入一个接口,只能注入具体的实例。显示你真正想要完成的事情,而不是一个抽象的想法。 –