Laden des Kontexts im Frühjahr mit web.xml


68

Gibt es eine Möglichkeit, einen Kontext mithilfe von web.xml in einer Spring MVC-Anwendung zu laden?

Antworten:


118

Aus den Frühlingsdokumenten

Spring kann problemlos in jedes Java-basierte Webframework integriert werden. Sie müssen lediglich den ContextLoaderListener in Ihrer web.xml deklarieren und mithilfe einer contextConfigLocation festlegen, welche Kontextdateien geladen werden sollen.

Die <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> 

Sie können dann den WebApplicationContext verwenden, um Ihre Beans in den Griff zu bekommen.

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

Weitere Informationen finden Sie unter http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/web/context/support/WebApplicationContextUtils.html


2
Wie greife ich auf den Kontext zu? und Wollen Sie damit sagen, dass der Kontext mit Spring Context geladen wird, sobald die Anwendung gestartet wird? Bitte klären Sie, weil ich neu im Frühling bin. Vielen Dank für Ihre Antwort
Ganesh

Hier ist der Link für die neuesten APIs im Zusammenhang mit WebApplicationContextUtils. docs.spring.io/spring-framework/docs/current/javadoc-api/org/…
Ajitesh

34

Sie können auch die Kontextposition relativ zum aktuellen Klassenpfad angeben, was möglicherweise vorzuziehen ist

<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>

Welche Bedeutung hat das *? Ohne geht es nicht:IOException parsing XML document from ServletContext resource [/>classpath:/applicationContext.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/>classpath:/applicationContext.xml]
DavidS

1
Ich habe gerade einen Blog-Beitrag gefunden, der meine Frage classpath* hier beantwortet .
DavidS

17

Sie können den Kontext auch laden, während Sie das Servlet selbst definieren ( WebApplicationContext ).

  <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>

eher als ( 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> 

oder kann beides zusammen machen.

Der Nachteil der Verwendung von WebApplicationContext besteht darin, dass der Kontext nur für diesen bestimmten Spring-Einstiegspunkt ( DispatcherServlet) geladen wird, wobei wie bei den oben genannten Methoden der Kontext für mehrere Einstiegspunkte (z. B. Webservice Servlet, REST servletusw.) geladen wird.

Der von geladene Kontext ContextLoaderListenerist infact ein übergeordneter Kontext zu dem speziell für DisplacherServlet geladenen. Grundsätzlich können Sie also alle Ihre Business Service-, Datenzugriffs- oder Repository-Beans im Anwendungskontext laden und Ihren Controller trennen und Resolver-Beans in WebApplicationContext anzeigen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.