2008-09-27 9 views
7

मैं वसंत में निम्नलिखित की तरह कुछ करना चाहता हूँ:वसंत xml कॉन्फ़िगरेशन फ़ाइल में पढ़ने के लिए आप एक बीन की संपत्ति कैसे प्राप्त करते हैं?

<beans> 
    ... 
    <bean id="bean1" ... /> 
    <bean id="bean2"> 
     <property name="propName" value="bean1.foo" /> 
... 

मुझे लगता है कि इस bean1 की विधि getFoo() का उपयोग और bean2 की विधि setPropName() कहेंगे लगता होगा, लेकिन यह प्रतीत नहीं होता काम करने के लिए।

उत्तर

6

मैं क्या समझ में आ:

  1. आपके पास एक सेम (bean1) एक संपत्ति कहा जाता है "foo"
  2. साथ आप एक और सेम है (बीन 2) "प्रोपनाम" नामक संपत्ति के साथ, में भी वही "foo" होना चाहिए जो बीन 1 में है।

क्यों नहीं यह कर:

<beans> 
... 
<bean id="foo" class="foopackage.foo"/> 
<bean id="bean1" class="foopackage.bean1"> 
    <property name="foo" ref="foo"/> 
</bean> 
<bean id="bean2" class="foopackage.bean2"> 
    <property name="propName" ref="foo"/> 
</bean> 
.... 
</beans> 

ऐसा करने से, अपने bean2 अपने उदाहरण की तरह bean1 के लिए युग्मित नहीं है। आप एक-दूसरे को प्रभावित किए बिना बीन 1 और बीन 2 बदल सकते हैं।

आप वास्तव इंजेक्शन आप प्रस्तावित करने की जरूरत है, तो आप उपयोग कर सकते हैं:

<util:property-path id="propName" path="bean1.foo"/> 
-2

मुझे लगता है कि आपको बीन 1 इंजेक्ट करना है, फिर समय-समय पर समस्या के कारण foo प्राप्त करें। ढांचा लक्ष्य लक्ष्य बीन के मूल्य को कब हल करता है?

आप एक पॉइंटर बीन बना सकते हैं और उसे कॉन्फ़िगर कर सकते हैं।

class SpringRef { 
    private String targetProperty; 
    private Object targetBean; 

    //getters/setters 

    public Object getValue() { 
    //resolve the value of the targetProperty on targetBean. 
    } 
} 

Common-BeanUtils सहायक होना चाहिए।

5

आप उपयोग करने की आवश्यकता PropertyPathFactoryBean:

 
    <bean id="bean2" depends-on="bean1"> 
     <property name="propName"> 
      <bean class="org.springframework.beans.factory.config.PropertyPathFactoryBean"> 
       <property name="targetBeanName" value="bean1"/> 
       <property name="propertyPath" value="foo"/> 
      </bean> 
     </property> 
    </bean> 
+0

एक वैकल्पिक वाक्य रचना लक्ष्य सेम नाम और संपत्ति पथ सेट करने के लिए "id" विशेषता का उपयोग करता है। <बीन आईडी = "बीन 1.फू" वर्ग = "org.springframework.beans.factory.config.PropertyPathFactoryBean"> – flicken

संबंधित मुद्दे