आप PropertyPlaceholderConfigurer चाहते हैं। मैनुअल का वह अनुभाग स्पॉट पर जितना संभव हो उतना बेहतर दिखाता है।
आपके उदाहरण में, आपको या तो संपत्ति के मूल्य को class1
या class2
(वसंत संदर्भ में वांछित बीन का नाम) बदलने की आवश्यकता होगी।
वैकल्पिक रूप से, आपके विन्यास हो सकता है:
<bean id="mainView"
class="mainView">
<property name="angebotsClient" ref="angebotsClient" />
<property name="class">
<bean class="${classToUse}">
<constructor-arg ref="mainView"/>
</bean>
</property>
</bean>
विन्यास युक्त फ़ाइल के साथ
: classToUse = fully.qualified.name.of.some.Class
सेम या वर्ग के नाम का उपयोग नहीं होगा उपयोगकर्ता-संपादन योग्य कॉन्फ़िगरेशन फ़ाइल में स्वीकार्य है, और आपको वास्तव में कॉन्फ़िगरेशन पैरामीटर मान के रूप में "वाई" और "एन" का उपयोग करने की आवश्यकता है। उस स्थिति में, आपको जावा में ऐसा करना होगा, वसंत ट्यूरिंग-पूर्ण होने का मतलब नहीं है।
mainView सीधे आवेदन संदर्भ पहुंच सकता है:
if (this.withSmartCards) {
this.class_ = context.getBean("class1");
} else {
this.class_ = context.getBean("class2");
}
एक क्लीनर समाधान अपने ही वर्ग में उपयोगकर्ता विन्यास के प्रसंस्करण encapsulating किया जाएगा कि इसके बाद के संस्करण करना होगा ApplicationContextAware होने की जरूरत है कि कक्षाओं की संख्या को कम करने के लिए और इसे आवश्यकतानुसार अपने अन्य वर्गों में इंजेक्ट करें।
BeanFactoryPostProcessor का उपयोग करके, आप कक्षा संपत्ति प्रोग्रामेटिक रूप से परिभाषा पंजीकृत कर सकते हैं।FactoryBean का उपयोग करके, आप एक बीन गतिशील रूप से बना सकते हैं। दोनों स्प्रिंग के कुछ हद तक उन्नत उपयोग हैं।
एक तरफ: मुझे यकीन नहीं है कि आपकी उदाहरण कॉन्फ़िगरेशन कानूनी है, मुख्यव्यू और कक्षा 1/कक्षा 2 के बीच चक्रीय निर्भरता के कारण।
क्या यह {$ classIdToBeUsed} या $ {classIdToBeUsed} होना चाहिए? –
$ {classIdToBeUsed} :) टाइपो, धन्यवाद! जाहिर है, मैं KISS :) – Olivier