2012-09-30 12 views
13

में गुणों पर निर्भर करता है। मैं वसंत में रेफरी और निर्भरता के बीच उलझन में हूं। मैं वसंत डॉक्टर को पढ़ता हूं लेकिन मैं अभी भी उलझन में हूं। मैं दोनों के बीच सटीक अंतर जानना चाहता हूं और किस मामले में एक इस्तेमाल किया जाएगा।रेफरी बनाम वसंत

उत्तर

19

के अनुसार spring documentation

आप एक से अधिक सेम पर निर्भरता को व्यक्त करने की जरूरत है, आप में से 'निर्भर करता है-ऑन' विशेषता, अल्पविराम, खाली स्थान के और अर्धविराम सभी के साथ मूल्य के रूप में सेम नामों की सूची की आपूर्ति कर सकते वैध सीमांकक, इसलिए जैसे:

<bean id="beanOne" class="ExampleBean" depends-on="manager,accountDao"> 
    <property name="manager" ref="manager" /> 
</bean> 

<bean id="manager" class="ManagerBean" /> 
<bean id="accountDao" class="x.y.jdbc.JdbcAccountDao" /> 

'निर्भर करता है-ऑन' विशेषता और संपत्ति न केवल एक प्रारंभ समय निर्भरता निर्दिष्ट करने के लिए प्रयोग किया जाता है, लेकिन यह भी (सिंगलटन सेम के मामले में इसी को नष्ट समय निर्भरता निर्दिष्ट करने के लिए केवल)। 'निर्भर-ऑन' विशेषता में परिभाषित आश्रित बीन्स प्रासंगिक बीन को नष्ट होने से पहले नष्ट कर दिए जाएंगे। इस प्रकार आप शट डाउन ऑर्डर को भी नियंत्रित कर सकते हैं।

दूसरी ओर, अधिकांश स्थितियों के लिए, तथ्य यह है कि एक बीन दूसरे की निर्भरता इस तथ्य से व्यक्त किया जाता है कि एक बीन दूसरे की संपत्ति के रूप में सेट किया जाता है। यह आमतौर पर एक्सएमएल-आधारित कॉन्फ़िगरेशन मेटाडेटा में तत्व के साथ पूरा किया जाता है।

<bean id="a" class="ClassA"/> 
<bean id="b" class="ClassB"> 
<property name="aref" ref="a" /> 
</bean> 
+0

यह अच्छा स्पष्टीकरण :) – Krishna

+0

@Anshu अगर मैं सेम आईडी लेकिन पूरा नाम पता नहीं है क्या है? – verystrongjoe

+0

यह बीन बी निर्माण के लिए बीन ए इंतजार करने के लिए बहुत मददगार है, भले ही बी ए की संपत्ति न हो। मैंने इस मामले को परीक्षण में मारा जहां मुझे क्लाइंट के सामने प्रारंभ करने के लिए नेटवर्क प्रॉक्सी की आवश्यकता थी, भले ही ग्राहक को कुछ भी नहीं पता था प्रॉक्सी। – Wheezil

10

इसके अलावा, http://docs.spring.io/spring/docs/3.2.x/javadoc-api/org/springframework/context/annotation/DependsOn.html

निर्भर करता है-ऑन -> बीन्स, जिस पर वर्तमान सेम निर्भर करता है। निर्दिष्ट बीन्स इस बीन से पहले कंटेनर द्वारा बनाए जाने की गारंटी है। उन मामलों में अक्सर उपयोग किया जाता है जहां एक बीन गुणों या कन्स्ट्रक्टर तर्कों के माध्यम से स्पष्ट रूप से किसी अन्य पर निर्भर नहीं होता है, बल्कि यह अन्य बीन के प्रारंभिक दुष्प्रभावों पर निर्भर करता है।

प्रदान की है, नीचे दिए गए कथन गलत है ऊपर जवाब में,

"आश्रित सेम कि में परिभाषित कर रहे हैं 'निर्भर करता है-ऑन' विशेषता पहले प्रासंगिक सेम ही नष्ट किया जा रहा से पहले नष्ट कर दिया जाएगा"

मुख्य बीन पहले नष्ट हो जाएगा और फिर निर्भर बीन्स नष्ट हो जाएगा।

यहाँ मेरी परीक्षा परिणाम है,

मुख्य वर्ग के नष्ट कहा जाता है।

आश्रित को नष्ट कर दिया जाता है।

3

शायद ऐसी परिस्थिति का एक उदाहरण जहां पर निर्भर करता है, मदद की ज़रूरत होगी। मैं अपने सेम लोड करने और तार करने के लिए वसंत का उपयोग करता हूं।

<bean id="myBean" class="my.package.Class"> 
    <property name="destination" value="bean:otherBeanId?method=doSomething"/> 
</bean> 

<bean id="otherBeanId" class="my.package.OtherClass"/> 

सूचना है कि संपत्ति का मान एक स्ट्रिंग है, जो संदर्भ देता otherBeanId है: यहाँ एक उदाहरण सेम परिभाषा है। इस चर को हल करने के तरीके के कारण, वसंत निर्भरता के बारे में नहीं सीखता है, इसलिए यह अन्य बीनआईडी को नष्ट कर सकता है तो myBean। यह थोड़ी देर के लिए टूटी हुई स्थिति में myBean छोड़ सकता है।

मैं उपयोग कर सकते हैं इस प्रकार इस समस्या को दूर करने के लिए पर निर्भर करता है:

<bean id="myBean" class="my.package.Class" depends-on="otherBeanId"> 
    <property name="destination" value="bean:otherBeanId?method=doSomething"/> 
</bean> 
संबंधित मुद्दे