spring的MVC; contextConfigLocation加载顺序

我正在重新配置一个Webapp。我想将所有内容从调度程序servlet移到ContextLoaderListener中。(这是由于安全配置的更改超出了此问题的范围)

如果我有多个应用程序上下文xml文件,那么按什么顺序加载它们是否重要?例如,在指定DAO和服务bean的xml文件之前,是否需要加载包含context:component-

scan的xml文件?

(或这是模拟问题?)我将如何指定*

_applicationContext.xml的加载顺序,假设A_applicationContext.xml应在B_applicationContext.xml之前加载,而B_applicationContext.xml应在C_applicationContext.xml之前加载

我的web.xml如下:

    <web-app id="WebApp_ID" version="2.4"

xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<servlet>

<servlet-name>AssessmentDelivery</servlet-name>

<servlet-class>

org.springframework.web.servlet.DispatcherServlet

</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>AssessmentDelivery</servlet-name>

<url-pattern>/</url-pattern>

</servlet-mapping>

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/config/*_applicationContext.xml</param-value>

</context-param>

<!-- security filter -->

<filter>

<filter-name>springSecurityFilterChain</filter-name>

<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>

</filter>

<filter-mapping>

<filter-name>springSecurityFilterChain</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<listener>

<listener-class>

org.springframework.web.context.ContextLoaderListener

</listener-class>

</listener>

</web-app>

回答:

一些建议:

这些天,请考虑通过Javaconfig对Spring进行配置。

要回答问题1和2非常重要,您需要了解以下内容:

  • 当您运行应用程序时,Spring会Application Context在Spring中创建一个由Spring创建和管理的所有bean。现在考虑一下,Application Context应该从两个“子”应用程序上下文创建它,通常在文档中“提及”它们的方式ServletApplicationContext和方式RootApplicationContext

    • 前者应该扫描有关Web的所有内容,例如您@Controller@Bean的有关基础架构的信息,例如for ViewResolver等。
    • 后者应扫描有关服务器的所有信息,例如@Service@Repositories@Bean有关基础结构(例如)的和DataSource

了解以下内容非常重要:

  • ServletApplicationContext -> RootApplicationContext

    • 这意味着前者可以访问后者(它与使用依赖项有关,即:a @Controller需要a @Service)。因此,它反映出Web侧面可以进入server侧面。

一旦说,这下面是 可能

  • RootApplicationContext -> ServletApplicationContext

    • 没有感觉到服务器端的Bean想要访问Web端(一种不好的做法)

很久以前我不使用web.xml,但

  • DispatcherServlet+ contextConfigLocation(通过<init-param>)代表ServletApplicationContext
  • ContextLoaderListener+ contextConfigLocation(通过<context-param>)代表RootApplicationContext

Bean是否通过以下方式声明并不重要:

  • XML
  • JavaConfig
  • 注释@Controller

Spring管理着以什么顺序创建bean的周期。因此.xml,无论如何声明文件(以您的情况为准)(关于顺序)都没有关系。

以上是 spring的MVC; contextConfigLocation加载顺序 的全部内容, 来源链接: utcz.com/qa/413711.html

回到顶部