ContextLoaderListener在Spring中的角色/用途?
我正在学习我的项目中使用的Spring Framework。 我在我的web.xml文件中找到了ContextLoaderListener条目。 但无法弄清楚它对开发人员有何帮助?
在ContextLoaderListener的官方文档中,它表示它将启动WebApplicationContext。 关于WebApplicationContext JavaDocs说:
提供Web应用程序配置的接口。
但是我无法理解我用ContextLoaderListener实现的内部初始化WebApplicationContext的功能?
根据我的理解 ,ContextLoaderListener读取Spring配置文件(对web.xml中的contextConfigLocation赋予值),解析它并加载在该配置文件中定义的单例bean。 同样,当我们要加载原型bean时,我们将使用相同的web应用上下文来加载它。 因此,我们使用ContextLoaderListener初始化web应用程序,以便我们提前读取/解析/验证配置文件,并且无论何时我们要注入依赖关系,我们都可以毫不拖延地直接执行它。 这种理解是否正确?
你的理解是正确的。 ApplicationContext
是Spring bean所在的地方。 ContextLoaderListener
的目的有两个:
将ApplicationContext
的生命周期与ServletContext
和的生命周期联系起来
自动创建ApplicationContext
,所以你不必编写显式代码来创建它 - 这是一个方便的功能。
关于ContextLoaderListener
另一个方便之处是它创建了一个WebApplicationContext
而WebApplicationContext
通过ServletContextAware
bean和getServletContext
方法提供对ServletContext
访问。
ContextLoaderListener
是可选的。 只需要在这里指出一点:您可以启动Spring应用程序,而无需配置ContextLoaderListener
,只需使用DispatcherServlet
即可创建基本的最小web.xml
。
这是它的样子:
web.xml中
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID"
version="2.5">
<display-name>Some Minimal Webapp</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
创建一个名为dispatcher-servlet.xml
的文件并将其存储在WEB-INF
。 由于我们在欢迎列表中提到了index.jsp
,因此请在WEB-INF
下添加此文件。
调度员servlet.xml中
在dispatcher-servlet.xml
定义你的bean:
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="bean1">
...
</bean>
<bean id="bean2">
...
</bean>
<context:component-scan base-package="com.example" />
<!-- Import your other configuration files too -->
<import resource="other-configs.xml"/>
<import resource="some-other-config.xml"/>
<!-- View Resolver -->
<bean
id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property
name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
对于简单的Spring应用程序,您不必在web.xml
定义ContextLoaderListener
; 你可以把所有的Spring配置文件放在<servlet>
:
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/mvc-core-config.xml, classpath:spring/business-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
对于更复杂的Spring应用程序,如果您定义了多个DispatcherServlet
,则可以使用ContextLoaderListener
定义的所有DispatcherServlet
共享的常见Spring配置文件:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/common-config.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>mvc1</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/mvc1-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>mvc2</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/mvc2-config.xmll</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
请记住, ContextLoaderListener
为根应用程序上下文执行实际的初始化工作。
我发现这篇文章有很多帮助:Spring MVC - 应用程序上下文与Web应用程序上下文
链接地址: http://www.djcxy.com/p/14391.html