57、原生组件注入-【源码分析】DispatcherServlet注入原理
57、原生组件注入DispatcherServlet注入原理
#### 继承关系
- `DispatcherServlet`继承自`FrameworkServlet`,而`FrameworkServlet`继承自`HttpServletBean`,最终`HttpServletBean`继承自`HttpServlet`。
- `DispatcherServlet`实现了`ApplicationContextAware`接口。
#### 初始化过程
1. **`init()`方法(`HttpServletBean`)**
- 在`Servlet`容器启动时,`init()`方法被调用。
- 该方法将`Servlet`配置参数注入到`DispatcherServlet`中。
- 主要步骤:
- 获取`Servlet`配置参数,创建`PropertyValues`对象。
- 将当前`Servlet`转换为`BeanWrapper`,以便使用`Spring`的方式注入参数。
- 调用子类的`initServletBean()`方法。
2. **`initServletBean()`方法(`FrameworkServlet`)**
- 初始化`WebApplicationContext`,这是`Spring MVC`的核心容器。
- 主要步骤:
- 调用`initWebApplicationContext()`方法创建或获取`WebApplicationContext`。
- 发布上下文到`ServletContext`。
- 调用`onRefresh()`方法,进行`DispatcherServlet`的个性化配置。
#### 关键方法分析
- **`initWebApplicationContext()`**
- 创建或获取`WebApplicationContext`实例。
- 如果已存在`WebApplicationContext`,则进行配置和刷新。
- 否则,创建新的`WebApplicationContext`,并将其与`ServletContext`关联。
- **`onRefresh()`**
- 在`WebApplicationContext`初始化完成后调用。
- 调用`initStrategies()`方法,初始化`Spring MVC`的各个组件,如处理器映射、视图解析器等。
#### 总结
`DispatcherServlet`的注入原理主要依赖于`Servlet`容器的生命周期和`Spring`的依赖注入机制。在初始化过程中,通过继承关系调用关键方法,完成`WebApplicationContext`的创建和各个组件的初始化,最终实现`DispatcherServlet`的注入和配置。