spring mvc(七):spring mvc总结

80 阅读2分钟

注:本系列源码分析基于spring 5.2.2.RELEASE,本文的分析基于 annotation 注解方式,gitee仓库链接:gitee.com/funcy/sprin….

1. servlet 3.0 规范

本系列一开始,先介绍了servlet3.0规范,通过该规范,可以让我们实现web项目的0xml配置.

  • servlet3.0规范中,servlet通过SPI机制提供了一个接口:ServletContainerInitializer
  • spring 实现了该接口,在其实现类SpringServletContainerInitializeronStartup(...) 方法中,会执行所有实现了WebApplicationInitializer接口的类的onStartup(...)方法,最终我们只需要实现WebApplicationInitializer接口即可;
  • 在我们自主实现WebApplicationInitializer接口的类中,在onStartup(...) 向servlet容器中手动注册了一 个servlet:DispatcherServlet,在这个servlet中会启动spring容器;

以上整个流程就这样:

2. 启用 webMvc 的方式

我们分析了启用webMvc的两种方式:

1. @EnableWebMvc

这种方式很简单,只需要这样:

// 使用@EnableWebMvc注解启用mvc功能
@Component
@EnableWebMvc
public class MvcConfig {
    ...
}

如果我们要处理 webMvc 的一些配置时,需要实现WebMvcConfigurer:

// 实现 WebMvcConfigurer,添加自定义配置
@Component
public class MyWebMvcConfigurer implements WebMvcConfigurer {

    // 重写WebMvcConfigurer方法,处理自定义配置
}

2. 实现 WebMvcConfigurationSupport

还有一种方式启用webMvc的 方式是实现 WebMvcConfigurationSupport

@Component
public class MyWebMvcConfigurationSupport extends WebMvcConfigurationSupport {
    // 重写配置方法,处理自定义配置
    ...

   /**
    * 比如,添加跨域配置,直接重写 addCorsMappings 方法
    */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        // 添加自己的配置
        ...
    }

}

需要注意的是,使用这种方式后,需要处理自定义配置时,就不能再去实现WebMvcConfigurer接口了,而应该直接重写WebMvcConfigurationSupport中的相应方法,如上面重写addCorsMappings().

3. 整个启动流程

用一张图来总结整个启动流程:

4. 请求流程

也用一张图来总结整个请求流程:


本文原文链接:my.oschina.net/funcy/blog/… ,限于作者个人水平,文中难免有错误之处,欢迎指正!原创不易,商业转载请联系作者获得授权,非商业转载请注明出处。

本系列的其他文章

【spring源码分析】spring源码分析系列目录