2017-04-08 189 views
0

我有以下的代码结构:依赖注入接口

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豆,怎么能程序知道挑选哪个绘制形状。圆形或三角形如何被注入图动态

+0

你的问题不清楚。有些东西必须决定注入哪种形状。你不能注入一个接口,只能注入具体的实例。显示你真正想要完成的事情,而不是一个抽象的想法。 –

回答

0

即使我在spring.xml中定义了bean,程序如何知道 要为Drawing绘制哪个形状。一个圆形或三角形如何动态地注入到绘图中? ?

没有,在你的xml(或通过注释)将为你提供像Triangle使容器可以注入到你的Drawing类,实现类像图所示:

<bean id="shape" class="com.myproject.Triangle"/> <!--Triangle is concrete class--> 

一个更重要的一点你可能会感兴趣的是,如果有多个可用的实现类(对于一个接口),那么你需要告诉Spring容器注入哪个实现需要被选择&。 Spring为此提供了各种选项,如@Primary@Qualifier等。通过这些选项,您可以告诉容器哪些实现需要使用。

你可以看看here的各种bean示例,了解它们如何提供具体类。另外,请查看here@Primary用法。