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`的注入和配置。

你可能感兴趣的:(spring,boot,后端,java,spring,servlet)