2009-10-21 10 views
23

क्या एक और बीन की संपत्ति पढ़कर एक बीन की संपत्ति को सेट करना संभव है? उदाहरण के लिए, मान लीजिए मैं था:वसंत: एक और बीन की संपत्ति पढ़कर एक बीन की संपत्ति सेट करें?

class A { 
    void setList(List list); 
} 

class B { 
    List getList(); 
} 

मैं दोनों वर्गों का दृष्टांत, और कॉल एक के सेटलिस्ट विधि, बी के getList विधि बुला के परिणाम में पारित करने के लिए वसंत चाहते हैं। स्प्रिंग कॉन्फ़िगरेशन कुछ ऐसा दिख सकता है:

<bean id="b" class="B"/> 
<bean id"a" class="A"> 
    <property name="list" ref="b" ref-property="list"/> 
</bean> 

हां, यह बना हुआ एक्सएमएल काम नहीं करता है।

क्यों बी में इंजेक्ट न करें? क्योंकि मैं अतिरिक्त निर्भरता पेश नहीं करना चाहता हूं। ए केवल निर्भर सूची है, बी

+0

के बाद से आप एक बेहतर जवाब है, तो आप अपनी स्वीकृति को बदलने पर विचार करेंगे? – Thom

उत्तर

46

देखते हैं कि आप वसंत 3.0 उपयोग कर रहे हैं यह नई वसंत अभिव्यक्ति भाषा

<bean id="a" class="A"> 
    <property name="list" 
     value="#{b.list}"/> 
</bean> 
के साथ ऐसा करना संभव है

spring 3.0 documentation

+0

मीठा, यह अच्छा है। इच्छा है कि मैं वसंत 3 का उपयोग कर रहा था। –

+0

उत्कृष्ट है जो मुझे चाहिए! –

+0

क्या SPEL के बिना ऐसा करने का एक एनोटेशन अनुकूल तरीका है? – coderatchet

18

पर कुछ तरीकों से नहीं हैं। यहाँ एक है:

<bean id="b" class="B"/> 
<bean id="a" class="A"> 
    <property name="list"> 
     <bean class="org.springframework.beans.factory.config.PropertyPathFactoryBean"> 
      <property name="targetObject" ref="b"/> 
      <property name="propertyPath" value="list"/> 
     </bean> 
    </property> 
</bean> 

इसके अलावा @ केविन के जवाब के अलावा <util:property-path/> तत्व

2

यदि आप एक निर्माता के लिए ऐसा करने की कोशिश कर रहे हैं तो ऐसा करें।

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
      <constructor-arg type="javax.sql.DataSource" value="#{jdbc.dataSource}">    
      </constructor-arg> 
</bean> 

यहाँ "JDBC" के रूप में है कि नीचे वर्णित है संपत्ति गेटर और सेटर और के रूप में initilized के साथ "डेटा स्रोत" है:

<bean id="jdbc" class="com.la.activator.DataSourceProvider"> 
    <property name="myDataSourcePool" ref="dsPoolService"/> 
</bean> 
संबंधित मुद्दे