码迷,mamicode.com
首页 > 其他好文 > 详细

3、ContextLoaderListener做了哪些事

时间:2019-07-29 23:01:38      阅读:358      评论:0      收藏:0      [点我收藏+]

标签:context   ali   tco   定义   反射   let   自定义   情况下   app   

职责

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父容器从这里开始。

 

3、ContextLoaderListener做了哪些事

标签:context   ali   tco   定义   反射   let   自定义   情况下   app   

原文地址:https://www.cnblogs.com/lay2017/p/11267032.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!