को लागू करते समय ApplicationContext.getBean() का उपयोग करने से कैसे बचें I बस स्प्रिंग आईओसी अवधारणा के साथ शुरू कर रहा हूं। मैं अक्सर इंटरनेट में पाए गए अधिकांश उदाहरण ऑब्जेक्ट प्राप्त करने के लिए कोड का उपयोग करता हूं।स्प्रिंग आईओसी
ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml");
Hello hello = (Hello) appContext.getBean("hello");
इन सवालों से एक संदर्भ के रूप में 1 और stackoverflow में 2। मैंने अनुमान लगाया है कि कोड में appContext.getBean ("हैलो") का उपयोग करना आवश्यक नहीं है जिसे खराब अभ्यास माना जाता है। इसके अलावा, अब और अनुशंसित नहीं है। मुझे यहां सही करें, अगर मेरा अनुमान गलत है।
ध्यान में रखते हुए, मैंने तदनुसार अपनी परियोजना में बदलाव किए हैं। यहाँ मेरी applicationContext.xml
<?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-3.2.xsd">
<bean id="utilClassRef" class="org.hd.derbyops.DUtils" lazy-init="false" />
<bean id="appContext" class="org.hd.derbyops.ContextProvider" lazy-init="false">
<property name="utils" ref="utilClassRef" />
</bean>
</beans>
मेरे contextProvider कक्षा कोड
public class ContextProvider implements ApplicationContextAware {
private static ApplicationContext ctx;
/**
* Objects as properties
*/
private static DUtils utils;
public void setApplicationContext(ApplicationContext appContext)
throws BeansException {
ctx = appContext;
}
public static ApplicationContext getApplicationContext() {
return ctx;
}
public static DUtils getUtils() {
return utils;
}
public void setUtils(DUtils dUtilsRef) {
utils = dUtilsRef;
}
}
उदाहरण के लिए, एक वर्ग एक कि org.hd.derbyops.DUtils पर निर्भर करता है पर विचार है। मैं पाने के लिए निम्न कोड लाइन
ContextProvider.getUtils();
inorder उपयोग कर रहा हूँ DUtils वर्ग ए में वस्तु, इस प्रकार मेरी कोड में कहीं भी ApplicationContext.getBean()
के उपयोग से परहेज।
मान लें, अगर मेरे पास 10 कक्षाएं हैं और मेरी कक्षा ए उन सभी पर निर्भर है, जिनकी वस्तुओं को ApplicationContext.getBean()
का उपयोग किये बिना बनाया और एक्सेस किया जाना है। उस मामले में, जैसा कि ऊपर किया गया है, मेरे पास ContextProvider क्लास के गुण बनाने के बाद सोटर और उस संपत्ति के गेटर का विचार है, जहां get<PropertyName>
स्थिर है। इसलिए, मैं इसे किसी ऑब्जेक्ट की आवश्यकता होने पर भी उपयोग कर सकता हूं, जैसे
ContextProvider.get<PropertyName>;
मेरा संक्षिप्त प्रश्न यहां दिया गया है। सबसे पहले, क्या मेरा दृष्टिकोण सही है? यदि यह सही है, स्टार्ट-अप पर सभी सेम लोड करना, क्या यह प्रदर्शन हत्यारा नहीं होगा? आप अपने आवेदनों में कम से कम एक बार से अधिक बार कॉल करने के बिना कैसे करेंगे?
यदि आप एक वेब-एप्लिकेशन & डिज़ाइन करना चाहते थे तो आप किसी भी कोड में ApplicationContext.getBean()
का उपयोग किये बिना स्प्रिंग आईओसी को लागू करना चाहते थे। आप वह कैसे करेंगें?
नोट: अन्य प्रश्न के संदर्भ में
ApplicationContext.getBean कॉलिंग ऊपर टैग किए गए() नियंत्रण के उलट नहीं है!
आप वसंत MVC उपयोग कर रहे हैं या बुनियादी servlets का उपयोग करने की कोशिश कर रहा है? –
मैं स्प्रिंग एमवीसी का उपयोग नहीं कर रहा हूं, बस आईओसी – srk
के लिए इसका उपयोग कर रहा हूं, सामान्य रूप से, * किसी को * 'एप्लिकेशनकॉन्टेक्स्ट' से बीन प्राप्त करने की आवश्यकता होगी। आदर्श रूप में, इसे केवल एक बार बुलाया जा रहा है, और यह बूटस्ट्रैपिंग ऑब्जेक्ट द्वारा होगा ... –