मैं वसंत में एक सेम परिभाषा के साथ अच्छी तरह से जाना नहीं है और यह प्रॉक्सी समकक्ष जो हर जगह इस्तेमाल किया जा करने के लिए है है:ApplicationContext.getBean (कक्षा clazz) प्रॉक्सी
<bean name="my.Bean" class="org.springframework.aop.framework.ProxyFactoryBean" scope="prototype">
<property name="proxyInterfaces" value="my.Interface"/>
<property name="target" ref="my.BeanTarget"/>
<property name="interceptorNames">
<list>
<value>someInterceptor</value>
</list>
</property>
</bean>
<bean name="my.BeanTarget" class="my.InterfaceImpl" scope="prototype">
<property name="foo" ref="bar"/>
</bean>
यह सब अच्छी तरह से काम करता है; और पूर्व वसंत v3 दुनिया में मैं जैसे
ApplicationContext ctx = ...;
my.Interface foo = (my.Interface) ctx.getBean("my.Bean"); // cast is necessary
स्प्रिंग 3 में यह प्रकार सुरक्षित लुकअप करने के लिए संभव हो गया है कि यह उपयोग कर रहा था, जैसे:
my.Interface foo = ctx.getBean(my.Interface.class);
फिर, यह साधारण सेम के लिए अच्छी तरह से काम करता है के लिए है, जबकि प्रॉक्सिड बीन्स मुझे my.Bean
के बजाय my.BeanTarget
मिल रहा है। मैं my.BeanTarget
इनलाइन करने के लिए इसे छिपा बनाने के लिए (के रूप में वसंत दस्तावेज में दिखाया गया है) की कोशिश की है, लेकिन सभी मुझे मिल गया
org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [my.Interface] is defined: expected single bean but found 0:
तो यह प्रॉक्सी सेम के साथ प्रकार सुरक्षित सेम लुकअप उपयोग करना संभव है और हाँ अगर था - कैसे?
क्या आपको वास्तव में संदर्भ के साथ सीधे बातचीत करने की आवश्यकता है? मेरे अधिकांश अनुप्रयोगों को केवल इसे बूटस्ट्रैप करने की आवश्यकता होती है और फिर बाकी सब कुछ निर्भरता इंजेक्शन (जो प्रॉक्सयुक्त बीन्स के लिए काम करता है) के साथ संभाला जाता है। मुझे कुछ ढांचे की चीज़ें दी गई हैं जहां मुझे संदर्भ तक पहुंचने की आवश्यकता थी, लेकिन, मेरे अनुभव में, यह दुर्लभ था। – SteveD
हमारी प्रणाली काफी व्यापक है और कुछ बिट्स और कक्षाएं वसंत में पैदा नहीं होती हैं (न ही यह हो सकती है), इसलिए उन्हें आवश्यक निर्भरताओं के लिए बीनफैक्टरी/एपीसीटीएक्स का उपयोग करना होगा। – mindas