web环境下的IOC容器初始化

本文详细解析了Spring框架中IOC容器的启动流程,从ContextLoaderListener的contextInitialized函数开始,到initWebApplicationContext函数的核心调用,再到XMLWebApplicationContext对象的创建,最后到AbstractApplicationContext的refresh方法,揭示了IOC启动的关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先来看个流程图在这里插入图片描述
首先IOC启动是由其运行环境的容器拉起来的,我们来看一个web.xml配置就知道了在这里插入图片描述
记得上面两个高亮处.

1.contextInitialized
首先ContextLoaderListener的contextInitialized函数是最开始的地方,也是应该由运行的容器调用的地方.我们来看下ContextLoaderListener的类的描述说明在这里插入图片描述
这里说的很明白start up 和shut down都是在这里做的.每启动一个contexloaderlistener对象就意味着创建了一个新的web app

2.initWebApplicationContext
这个函数调用是核心调用,主要功能是创建上下文,调用refresh启动IOC.代码截图如下
在这里插入图片描述
有4处高亮.首先通过getAttribute方法检测当前的ServerletContext实例是否已经初始化过,如果有则return.

3 createWebApplicationContext
第一次进来this.context这个私有变量一定是NULL的.所以会调用这个函数进行context的初始化, 跟踪代码截图如下在这里插入图片描述
看createWebApplicationContext实现代码一眼就看出来了,首先获取要创建的对象class.然后通过反射创建一个需要的对象.这里的关键就是这个class是怎么获取的.看函数determineContextClass实现.首先是通过传递进来的ServletContext对象,获取其初始化的参数CONTEXT_CLASS_PARAM.其定义如下
public static final String CONTEXT_CLASS_PARAM = “contextClass”;
好了回去看我截的第二图, web.xml的配置.看参数配置
在这里插入图片描述
所以这里获取的应该是字符串org.springframework.framework.web.context.XMLWebApplicationContext
然后拿着这个字符串生成class.最终context就是XMLWebApplicationContext的一个对象

4.configureAndRefreshWebApplicationContext
这个函数没什么好说的,最主要就是refresh的调用.XmlWebApplicationContext是AbstractApplicationContext的子类.所以最终调用的AbstractApplicationContext的refresh.这里就是IOC启动的关键地方.大家都知道的

5.后面就是一些收尾的工作了,不用太多注意.只有一点,要调用setAttribute给特定属性设值,免得重复初始化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bruk_spp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值