SpringMVC初始化流程

本文详细阐述了SpringMVC的初始化流程,从web.xml开始,经过DispatcherServlet的配置,到HttpServiceBean的init()方法执行,进而初始化Spring MVC容器,包括创建XmlWebApplicationContext,与Spring父容器关联,刷新容器,配置BeanFactory,注册监听类,实例化单例bean,最后到DispatcherServlet策略组件的初始化。整个过程详尽地展示了Spring MVC如何逐步构建和启动。
摘要由CSDN通过智能技术生成

启动.....

访问web.xml.web.xml中找到dispatcherService前端控制器。

DispatcherService继承了FrameworkServletFrameworkServlet继承了HttpServiceBean,HttpServiceBean继承了HttpService

HttpServiceBeaninit()方法会执行。

 

HttpServiceBeaninit()方法初始化DespatcherService的配置参数。

HttpServiceBeaninit()方法调用initServletBean()方法,

 

该方法是空的,他的子类FrameWorkService重写了该方法,调用FrameWorkServiceinitServerBean()方法,

FrameWorkServiceinitServerBean()方法初始化了sprinvMVC容器:

 

 


initWebApplicationContext是对Spring mvc容器的初始化

 

CreateWebApplicationContext(parent)是初始化Spring mvc的过程:

 

这个过程会生成一个 XmlWebApplicationContext 的实例,也就是Spring MVC的容器。

 

初始化完成springMVC以后,3.spring父容器进行关联,使得mvc容器能访问spring容器里面的bean

 

之后会调用Springrefresh()方法。

 

该方法实现了对bean的初始化。

 

得到并配置了BeanFactory.

 

注册了MessageSource

 

注册了监听类ApplicationEventMulticaster

 

实例化所有的单例beanfinishBeanFactoryInitialization(beanFactory);

 

重点在于最后一步,finishRefresh();这一步会触发一个ApplicationEvent

,进入 AbstractApplicationContext中的

protected void finishRefresh() {  

    publishEvent(new ContextRefreshedEvent(this));  

}  

其中this是指XmlWebApplicationContext对象。

接下来继续调用AbstractApplicationContext中的:publishEvent()方法。

 

发送者:XmlWebApplicationContext发布的这个eventXmlWebApplicationContext这个对象有个applicationEventMulticaster对象,实际为SimpleApplicationEventMulticaster对象。

 

实际的消息就是在这里发布的。

接受者:接受者实际就是DispatcherServlet,因为DispatcherServlet实现了ApplicationListener接口 :

 

当发布了消息后,实际上就是调用了DispatcherServlet(实际这个方法在DispatcherServlet的父类FrameworkServlet中)的onApplicationEvent方法,我们来看一下onApplicationEvent的实现:

 

之后调用子类DispatcherServletonRefresh(ApplicationContext context)方法

 

 

 

onRefresh()方法重启context,并初始化DispatcherServlet策略组件(bean)(文件解析器、映射器、适配器、异常解析器、视图解析器、数据保存重定向等初始化)

 

实际上,在进行initStrategies的时候,上有的bean都已经加载好了。

 

到此为止!!

 

wac = createWebApplicationContext(parent);结束了!!

 

接下来,将spring mvccontext注册到servletcontext

getServletContext().setAttribute(attrName, wac);

 

到此为止!!

this.webApplicationContext = initWebApplicationContext();结束!

 

整个Spring MVC的加载结束了!

 

 简化:

1. web应用启动时扫描web.xml文件,扫描到DispatcherServlet,对其进行初始化

2. 调用DispatcherServlet父类的父类HttpServletBeaninit()方法,把配置DispatcherServlet的初始化参数设置到DispatcherServlet中,调用子类FrameworkServletinitServletBean()方法

3. initServletBean()创建springMVC容器实例并初始化容器,并且和spring父容器进行关联,使得mvc容器能访问spring容器里面的bean,之后调用子类DispatcherServletonRefresh(ApplicationContext context)方法

4. onRefresh(ApplicationContext context)进行DispatcherServlet的策略组件初始化工作,url映射初始化,文件解析初始化,运行适配器初始化等等。

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值