2013-05-15 169 views
0

這裏是從這裏發佈一些代碼,這可以解釋我的問題:彈簧3依賴注入和接口

接口:

package org.better.place 

public interface SuperDuperInterface{ 
    public void saveWorld(); 
} 

實現:

package org.better.place 

import org.springframework.stereotype 

public class SuperDuperClass implements SuperDuperInterface{ 
    public void saveWorld(){ 
      System.out.println("Done"); 
    } 
} 

客戶:

package org.better.place 

import org.springframework.beans.factory.annotation.Autowire; 

public class SuperDuperService{ 

     private SuperDuperInterface superDuper; 

     public void doIt(){ 
      superDuper.saveWorld(); 
     } 

     public void setSuperDuper(SuperDuperInterface superDuper) { 
     this.superDuper = superDuper; 
     } 
} 

我的問題是 - 我如何在spring配置中配置bean?我不想使用@Autowired和其他註釋。

我想這會是這樣的:

<bean id="superService" class="org.better.place.SuperDuperService"> 
    <property name="superDuper" ref="superWorker" 
</bean> 

<bean id="superWorker" class=?????? parent=???????? > 
</bean> 

回答

1

你必須實例化實現類,當然:

<bean id="superWorker" class="org.better.place.SuperDuperClass"/> 

,如果你想你只需要parent屬性創建具有不想重複聲明的公共屬性的多個bean,以便將其移動到具體bean定義可引用的抽象父bean定義。
假設SuperDuperClass具有一些性質:

<bean id="superWorkerPrototype" abstract="true" 
     class="org.better.place.SuperDuperClass"> 
    <property name="prop1" value="value1"/> 
    <property name="prop2" value="value2"/> 
</bean> 

<bean id="superWorker1" parent="superWorkerPrototype" 
     class="org.better.place.SuperDuperClass"> 
    <property name="prop3" value="foo"/> 
</bean> 

<bean id="superWorker2" parent="superWorkerPrototype" 
     class="org.better.place.SuperDuperClass"> 
    <property name="prop3" value="bar"/> 
</bean> 

它將導致在具有用於prop1prop2相同的值,但不同者兩個實例爲prop3

0

您可以給實施類的完全限定名稱,並且不要求給出parent屬性。 Spring會自動查找,如果它可以的SuperDuperClass實例分配到的SuperDuperService

<bean id="superWorker" class="org.better.place.SuperDuperClass" > 
</bean> 
+0

superDuper場我看不出有什麼可以讓Spring自動注入'SuperDuperClass'實例的'SuperDuperService'不使用'@Autowired '在裏面(OP想要避免)。 – zagyi

+0

,除非你明確地說@Autowired或在xml spring中提到auto-wire不自動連線。我在這裏試圖解釋的是避免父標籤,因爲spring會發現它是否可以分配實例 – sanbhat

+0

是的,這就是我的意思。它們都不在問題的代碼片段中,所以不明白爲什麼你寫了這樣的話:「Spring會自動查找它是否可以將SuperDuperClass的實例分配給SuperDuperService的superDuper字段」 – zagyi