2013-06-29 168 views
1

有人可以告訴我如何使用Map對象連接以下構造函數而不使用XML,並且只使用註釋?可能嗎?使用註解將映射注入到構造函數中

public class MyClass { 
... 
    public MyClass (final Map<String, SomeBean> map) { 
     this.map = map; 
    } 
... 
} 

當前XML我想擺脫:

<bean id="mybean" class="my.package.MyClass"> 
    <constructor-arg> 
     <util:map> 
      <entry key="KEY1" value-ref="ref-bean1" /> 
      <entry key="KEY2" value-ref="ref-bean2" /> 
     </util:map> 
    </constructor-arg> 
</bean> 

<bean id="ref-bean1" class="my.package.SomeBean">... </bean> 

<bean id="ref-bean2" class="my.package.SomeBean">... </bean> 
+0

可以使用['@ Configuration'](http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-java) ?該解決方案只會將XML配置移至Java代碼。 – LaurentG

回答

1

假設你的Spring配置配置爲註釋配置,你應該能夠通過僅僅標誌着MyClass構造消除myBean聲明如@Autowired

public class MyClass { 
... 
    @Autowired 
    public MyClass (final Map<String, SomeBean> map) { 
     this.map = map; 
    } 
... 
} 

Spring將試圖使用bean的名稱鍵控SomeBeanMap實例接線MyClass構造。

由於配置了SomeBean的單獨實例(推測是使用自己的狀態),因此您需要將這些配置保留在XML中。

<bean id="KEY1" class="my.package.SomeBean">... </bean> 

<bean id="KEY2" class="my.package.SomeBean">... </bean> 

另外,正如LaurentG所說,總是有@Configuration

+0

感謝您的建議。實際上,我最終將2個bean作爲MyClass的成員自動裝配,然後在getMap()方法中創建該映射。理想情況下,我希望在MyClass的默認構造函數中創建該映射,但發現2個bean尚未連線(它們爲空)。 – user2533384