2017-04-08 116 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用法。