2012-02-12 57 views
1

我有一個類「盒子」與add方法接受所有的水果:添加所有實例的一個包列表與Spring

public class Box { 
     List <IFruit> fruits; 

     public void add (IFruit fruit) { 
      fruits.add(fruit); 
     } 
    } 

我想與Spring的applicationContext.xml的單一實例來定義這個類將會添加所有的IFruits實現(包括xyfruits,xyfruits.Apple)。

第一部分是簡單的:

<bean id="box" class="x.y.Box"/> 

但是如何連接所有IFruit實例?

謝謝!

+2

這個問題和答案你在找什麼? http://stackoverflow.com/a/9144271/280244 – Ralph 2012-02-12 19:12:43

+0

實例你的意思是聲明的bean,或者你想收集所有實現類的單個實例,而實際上並沒有將它們聲明爲bean? – mrembisz 2012-02-12 19:20:01

回答

3

如果@Autowire領域,你不需要定義任何事情,春天會發現IFruit接口的所有實例的應用程序上下文,並加載它們。

public class Box { 
    @Autowired 
    List <IFruit> fruits; //This should contain all IFruit's in the ApplicationContext 

    public void add (IFruit fruit) { 
     fruits.add(fruit); 
    } 
} 

當然,你需要添加元素<context:annotation-config/>到你的xml配置@Autowired去工作...

2

如果您創建列表中的二傳手,說setFruits,你就可以將它像這樣:

<bean id="box" class="x.y.Box"> 
    <property name="fruits"> 
    <list> 
     <ref bean="fruit1" /> 
     <ref bean="fruit2" /> 
     ... 
    </list> 
    </property> 
</bean> 

<bean id="fruit1" class="x.y.fruits.Apple" /> 
... 

你也可以做到這一點同樣採用構造器注入。

+0

很好!但是我必須列出所有的課程嗎?我真的很想使用給定包中的所有類。 – 2012-02-12 19:20:15

+1

@Vojtěch:你必須在一個地方或另一個地方列出課程。沒有辦法自動查找給定包中的所有類。 – casablanca 2012-02-12 19:27:22