SpringMVC源码解析----初始化

HttpServletBean的init方法:

SpringMVC源码解析----初始化

这里调用子类的重写方法

FrameworkServlet的initServletBean方法:

SpringMVC源码解析----初始化

initWebApplicationContext方法:

SpringMVC源码解析----初始化

createWebApplicationContext方法:

SpringMVC源码解析----初始化

SpringMVC源码解析----初始化

configureAndRefreshWebApplicationContext方法:SpringMVC源码解析----初始化

AbstractApplicationContext的refresh方法:

SpringMVC源码解析----初始化

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

 

得到并配置了BeanFactory.

 

注册了MessageSource。

 

注册了监听类ApplicationEventMulticaster

 

实例化所有的单例bean:finishBeanFactoryInitialization(beanFactory);

 

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

,进入 AbstractApplicationContext中的

protected void finishRefresh() {  

    publishEvent(new ContextRefreshedEvent(this));  

}  

其中this是指XmlWebApplicationContext对象。

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

SpringMVC源码解析----初始化

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

SpringMVC源码解析----初始化

SpringMVC源码解析----初始化

SpringMVC源码解析----初始化


接收者:ContextRefreshListener(定义在FrameworkServlet内部)

SpringMVC源码解析----初始化

onApplicationEvent方法:

SpringMVC源码解析----初始化

调用DispatcherServlet的onRefresh方法:

SpringMVC源码解析----初始化

至此,初始化完成

 

 

部分参考:https://blog.csdn.net/z695284766/article/details/80677434

相关文章: