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

相关文章:

  • 2022-12-23
  • 2021-12-26
  • 2021-09-29
  • 2021-05-17
  • 2021-08-09
  • 2021-05-19
  • 2021-06-29
猜你喜欢
  • 2022-01-27
  • 2021-07-17
  • 2022-01-18
  • 2021-12-25
  • 2021-06-15
  • 2021-04-19
  • 2023-03-30
相关资源
相似解决方案