DispatcherServlet的初始化过程
源码学习上下文
-
DispatcherServlet本身就是一个servlet,所以当web容器(Tomcat)启动加载servlet对象到内存后,会调用servlet生命周期中的init()方法触发servlet实现类的初始化逻辑,于是DispatcherServlet的初始化分析从执行init()方法开始。
DispatcherServlet.png
init()方法的实现逻辑

initServletBean()执行逻辑

- 从源码截图中可以看到主要逻辑是执行initWebApplicationContext()方法。
initWebApplicationContext()执行逻辑

- 553行创建应用上下文
- 560行根据上下文信息由子类重写特定逻辑
createWebApplicationContext(rootContext)执行逻辑
- createWebApplicationContext(rootContext)
- createWebApplicationContext((ApplicationContext) parent)
- configureAndRefreshWebApplicationContext(wac)
- createWebApplicationContext((ApplicationContext) parent)

- 由上图源码可以看到,会通过调用refresh()来完成spring 对bean的管理。
- 这个refresh()方法的执行逻辑主要会完成和spring mvc 相关的bean的定义和加载,粗略来说基于mvc标签在xml文件中定义的信息都会找到对应的处理逻辑,由于涉及的内容过多,这个点留在后续分析。
DispatcherServlet.onRefresh(wac)执行逻辑

- onRefresh由子类DispatcherServlet重写,可以看到方法内部调用initStrategies(context)。
- 很明显,initStrategies方法内部会初始化各个策略接口的实现类。
自此DispatcherServlet的初始化逻辑执行完成,后续就是等待请求进来,处理请求的过程。
网友评论