3ContextLoaderListener做了哪些事
Posted lay2017
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3ContextLoaderListener做了哪些事相关的知识,希望对你有一定的参考价值。
职责
spring通过监听ServletContext的初始化来创建父容器,ContextLoaderListener是实现了ServletContextListener接口的实现类,UML如图所示:
UML中我们看到ContextLoaderListener不仅实现了ServletContextListener,还继承了ContextLoader。这意味着ContextLoaderListener包含了两种职责:
1)监听ServletContext初始化;
2)配置加载spring容器;
监听ServletContext初始化
通常情况下ContextLoaderListener将被配置在web.xml中或者通过SPI机制添加到ServletContext中,在ServletContext初始化的时候将会触发该监听器,回调contextInitialized(ServletContextEvent event)方法。
ContextLoaderListener在触发回调方法以后就直接初始化spring的容器,调用initWebApplicationContext方法。
配置加载spring容器
进入initWebApplicationContext方法
该方法主要做了两件事
1)createWebApplicationContext创建WebApplicationContext的实例对象
2)configureAndRefreshWebApplicationContext配置并刷新context
createWebApplicationContext
该方法选择WebApplicationContext的实现类,并反射创建实例对象,选择方法如下
我们看到,它首先从servletContext中获取配置的contextClass,如果没有配置那么降级从默认策略里面拿contextClass,默认是XmlWebApplicationContext。
configureAndRefreshWebApplicationContext
该方法也做了两件事
1)配置WebApplicationContext
1-1)配置context的唯一ID
1-2)获取并配置contextConfigLocation
1-3)将ServletContext中的键值配置加入到Environment中
1-4)处理自定义配置接口ApplicationContextInitializer的实现类
2)refresh
构造完毕WebApplicationContext,并且配置完成以后将调用context的refresh方法,该方法是创建spring容器的核心方法。
总结
总得来说ContextLoaderListener作为spring父容器的起始点,创建并配置spring父容器从这里开始。
以上是关于3ContextLoaderListener做了哪些事的主要内容,如果未能解决你的问题,请参考以下文章