2011-04-04 90 views
3

我想通過另一個bean提供的值將值傳遞給構造函數(類型爲string)。由另一個bean提供的值的構造函數注入

類BeanOne(){ BeanOne(字符串消息){ ... }}

下面的聲明將工作

<bean id="beanOne" 
    class="com.abc.BeanOne"> 
    <constructor-arg index="0" type="java.lang.String" 
     value="Hi There" /> // instead of value="Hi There", i want to use bean property (value="someBean.message") 
</bean> 

不過,我想另一個bean(比如BeanTwo)爲BeanOne的消息屬性設置值。我嘗試嵌套屬性如下所示,但它不起作用。還消息屬性是不可見的直接在類&由另一個構造&內部稱爲然後通過該方法,所以我不能使用屬性注射&都使用唯一的構造注射

+0

順便說一句:如果構造函數可以由Spring自動分配,則不需要指定索引(和/或類型)。 - 例如,如果只有一個參數,或者所有參數的類型不同,則可以在xml配置中省略index屬性。 – Ralph 2011-04-05 07:17:21

回答

4

您可以使用MethodInvokingFactoryBean來獲取您的字符串值,然後將其注入到您的bean中。

  <bean id="message" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> 
      <property name="targetObject"><ref local="someBean"></property> 
      <property name="targetMethod"><value>getMessage</value></property> 
     </bean> 

     <bean id="beanOne" class="com.abc.BeanOne"> 
      <constructor-arg index="0" type="java.lang.String" ref="message"/> 
     </bean> 
+0

感謝「MethodInvokingFactoryBean」選項的工作。希望我能有一天更好,因爲你會在找到之前找到它:( – user593029 2011-04-05 14:12:53