HttpServletBean的init方法:
这里调用子类的重写方法
FrameworkServlet的initServletBean方法:
initWebApplicationContext方法:
createWebApplicationContext方法:
configureAndRefreshWebApplicationContext方法:
AbstractApplicationContext的refresh方法:
该方法实现了对bean的初始化。
得到并配置了BeanFactory.
注册了MessageSource。
注册了监听类ApplicationEventMulticaster
实例化所有的单例bean:finishBeanFactoryInitialization(beanFactory);
重点在于最后一步,finishRefresh();这一步会触发一个ApplicationEvent:
,进入 AbstractApplicationContext中的
protected void finishRefresh() {
publishEvent(new ContextRefreshedEvent(this));
}
其中this是指XmlWebApplicationContext对象。
接下来继续调用AbstractApplicationContext中的:publishEvent()方法。
发送者:XmlWebApplicationContext发布的这个event。XmlWebApplicationContext这个对象有个applicationEventMulticaster对象,实际为SimpleApplicationEventMulticaster对象。
接收者:ContextRefreshListener(定义在FrameworkServlet内部)
onApplicationEvent方法:
调用DispatcherServlet的onRefresh方法:
至此,初始化完成
部分参考:https://blog.csdn.net/z695284766/article/details/80677434