2011-06-23 10 views
63

का उपयोग कर वसंत में संदर्भ लोड हो रहा है क्या कोई तरीका है कि एक संदर्भ को स्प्रिंग एमवीसी अनुप्रयोग में web.xml का उपयोग करके लोड किया जा सकता है?वेब.xml

उत्तर

111

वसंत डॉक्स

वसंत से आसानी से किसी भी जावा आधारित वेब रूपरेखा में एकीकृत किया जा सकता है। तुम सब करने की ज़रूरत है अपने web.xml में ContextLoaderListener घोषित करने और जो संदर्भ फ़ाइलें लोड करने के लिए सेट करने के लिए एक contextConfigLocation उपयोग करने के लिए है।

<context-param>:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/applicationContext*.xml</param-value> 
</context-param> 

<listener> 
    <listener-class> 
     org.springframework.web.context.ContextLoaderListener 
    </listener-class> 
</listener> 

फिर आप WebApplicationContext उपयोग कर सकते हैं अपने सेम पर एक संभाल पाने के लिए।

WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(servlet.getServletContext()); 
SomeBean someBean = (SomeBean) ctx.getBean("someBean"); 

अधिक जानकारी के लिए http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/web/context/support/WebApplicationContextUtils.html देखें

+2

संदर्भ का उपयोग कैसे करें? और क्या आप कह रहे हैं कि जैसे ही एप्लिकेशन शुरू होता है, संदर्भ वसंत संदर्भ के साथ लोड किया जाएगा? कृपया स्पष्ट करें क्योंकि मैं वसंत के लिए नया हूं। आपके उत्तर के लिए धन्यवाद – tamilnad

+1

अद्यतन उत्तर – ddewaele

+0

देखें वेबएप्लिकेशन कॉन्टेक्स्टयूट्स से संबंधित नवीनतम एपीआई के लिए यहां लिंक है। https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/context/support/WebApplicationContextUtils.html – Ajitesh

34

तुम भी अपेक्षाकृत वर्तमान classpath है, जो बेहतर

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath*:applicationContext*.xml</param-value> 
</context-param> 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
+0

'*' का महत्व क्या है? यह इसके बिना काम नहीं करता है: 'IOException ServletContext संसाधन [/>classpath:/applicationContext.xml] से XML दस्तावेज़ को पार्स करना; नेस्टेड अपवाद java.io.FileNotFoundException: ServletContext संसाधन [/> classpath: /applicationContext.xml] ' – DavidS

+1

नहीं खोल सका, मुझे बस 'क्लासपाथ *' [यहां] (http: // www) के बारे में मेरे प्रश्न का उत्तर देने वाला एक ब्लॉग पोस्ट मिला। gridshore.nl/2008/05/13/spring-application-context-loading-tricks/)। – DavidS

13

जबकि सर्वलेट खुद को परिभाषित तुम भी संदर्भ लोड कर सकते हैं हो सकता है के लिए संदर्भ स्थान को निर्दिष्ट कर सकते हैं (वेबएपप्लिकेशन कॉन्टेक्स्ट)

<servlet> 
    <servlet-name>admin</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
       /WEB-INF/spring/*.xml 
      </param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>admin</servlet-name> 
    <url-pattern>/</url-pattern> 
    </servlet-mapping> 
बजाय

(ApplicationContext)

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/applicationContext*.xml</param-value> 
</context-param> 

<listener> 
    <listener-class> 
     org.springframework.web.context.ContextLoaderListener 
    </listener-class> 
</listener> 

या दोनों एक साथ कर सकते हैं। बस WebApplicationContext का उपयोग करने का

दोष यह है कि यह केवल इस विशेष स्प्रिंग प्रवेश बिंदु (DispatcherServlet) जहां ऊपर उल्लेख किया तरीकों संदर्भ के साथ के रूप में कई प्रवेश बिंदुओं के लिए लोड किया जाएगा के लिए संदर्भ लोड होगा है (उदाहरण के लिए। Webservice Servlet, REST servlet आदि)

प्रसंग ContextLoaderListener द्वारा लोड किया गया यह विशेष रूप से DisplacherServlet के लिए लोड किए गए के लिए एक मूल संदर्भ होगा। तो मूल रूप से आप एप्लिकेशन संदर्भ में अपनी सभी व्यावसायिक सेवा, डेटा एक्सेस या रिपोजिटरी बीन्स लोड कर सकते हैं और अपने कंट्रोलर को अलग कर सकते हैं, वेबएप्लिकेशन कॉन्टेक्स्ट पर रिज़ॉल्वर बीन्स देखें।