- 为了解决Servlet中创建容器次数过多和无法复用的问题,Spring提供了使用容器监听器
- ContextLoaderListener 是一个监听器对象, 继承自ContextLoader,实现的是ServletContextListener接口
- 使用这个监听器作用:
- 一次创建容器对象
- 把容器对象放入到ServletContext作用域
- ServletContextListener是为了接收ServletContext生命周期变化事件定义的接口,而ServletContext是定义了一系列和servlet容器通讯方法的接口,spring的ContextLoaderListener继承了它,只要在web应用中注册了这个监听自然也就能够收到容器启动和销毁事件
- 启动Web容器时,ContextLoaderListener读取在contextConfigLocation中定义的xml文件,自动装配ApplicationContext的配置信息,并产生WebApplicationContext对象,然后将这个对象放置在ServletContext的属性里
- 这样我们只要得到Servlet就可以得到WebApplicationContext对象,并利用这个对象访问spring容器管理的bean。
- 即通过配置为项目提供了spring支持,初始化了Ioc容器
设置监听器
- 在web.xml中加入配置。
示例
<!-- 配置spring核心监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- contextConfigLocation参数用来指定Spring的配置文件路径 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/resource/applicationContext.xml</param-value>
</context-param>
- 获取监听器对象
ApplicationContext context = WebApplicationContextUtils
.getWebApplicationContext(servletContextEvent.getServletContext());