मान लीजिए कि मैं वसंत config (वसंत के संस्करण 3.0.3 है) निम्नलिखित है दो:ऑब्जेक्ट के बजाय फैक्ट्रीबीन इंजेक्ट कैसे करें?
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="theFactoryBean" class="wax.MyFactoryBean"/>
<bean id="factoryBeanUser" class="wax.FactoryBeanUser">
<!-- what should be placed here?-->
</bean>
</beans>
मैं FactoryBean
कार्यान्वयन और कुछ अन्य उदाहरण के कहने की है। मुझे अन्य उदाहरण FactoryBean
पर इंजेक्ट करने के लिए स्प्रिंग की आवश्यकता है, न कि ऑब्जेक्ट उत्पन्न करता है।
इसे हल करने के दो संभावित तरीके हैं।
पहले एक, स्पष्ट और malfunctional:
[skipped irrelevant part]
Caused by: org.xml.sax.SAXParseException: The reference to entity "theFactoryBean" must end with the ';' delimiter.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1414)
मैं इस समाधान Spring: Getting FactoryBean object instead of FactoryBean.getObject() पाया, इस सवाल के जवाब दिए और चार लोगों के रूप में चिह्नित किया गया है:
<bean id="factoryBeanUser" class="wax.FactoryBeanUser">
<property name="myFactoryBean" ref="&theFactoryBean"/>
</bean>
इस config वसंत के साथ शुरू पर निम्न अपवाद फेंकता इसके लिए मतदान किया। तो मुझे लगता है कि यह समाधान काम कर सकता है, लेकिन वर्तमान में मेरे कोड में कुछ गड़बड़ है।
दूसरा एक, काम कर रहा है, लेकिन अजीब:
public class FactoryBeanUser implements ApplicationContextAware{
private MyFactoryBean myFactoryBean;
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
myFactoryBean = (MyFactoryBean)applicationContext.getBean("&theFactoryBean");
}
}
मेरा प्रश्न यह पहली दृष्टिकोण कार्यात्मक बनाने के लिए या मैं एक दूसरा तरीका के साथ छड़ी चाहिए संभव है?
मैं नहीं मानता संदर्भ नाम को एम्परसैंड द्वारा शुरू कर सकते हैं। मैं इसे हटा दूंगा और पुनः प्रयास करूंगा। इस मामले में संदर्भ कारखाने बीन का बीन नाम होना चाहिए। – duffymo
@duffymo यदि आप सही हैं तो जो लोग किसी अन्य समान विषय के उत्तर देने के लिए मतदान करते थे, वे पूरी तरह से गलत थे :) वैसे भी, अगर मैं फैक्ट्री बीन के नाम पर संदर्भ नाम बदलता हूं, तो स्प्रिंग इंजेक्शन मानता है कि 'फैक्ट्रीबीन' उत्पादन करता है। यह वास्तव में 'फैक्टरीबीन' के लिए बनाया गया है। – wax
मुझे लगता है कि मैं यहां कुछ भी सीखूंगा; मैंने कभी नहीं किया है। मैंने सोचा कि ऐप संदर्भ कारखाना था - आपको किसी और के लिए क्या चाहिए? – duffymo