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
的有关基础架构的信息,例如forViewResolver
等。 - 后者应扫描有关服务器的所有信息,例如
@Service
和@Repositories
和@Bean
有关基础结构(例如)的和DataSource
。
- 前者应该扫描有关Web的所有内容,例如您
了解以下内容非常重要:
ServletApplicationContext
->RootApplicationContext
- 这意味着前者可以访问后者(它与使用依赖项有关,即:a
@Controller
需要a@Service
)。因此,它反映出Web
侧面可以进入server
侧面。
- 这意味着前者可以访问后者(它与使用依赖项有关,即:a
一旦说,这下面是 可能
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