SpringBoot学习篇|配置拓展Webmvc

2023-05-17 10:47:25 浏览数 (1)

SpringBoot学习篇|配置拓展Webmvc

拓展WebMVC

Spring MVC Auto-configuration

有关内容原文见官方文档

简单来说就是能够通过Auto-configuration实现我们之前分析见到的全部功能,例如静态资源加载

  1. ContentNegotiatingViewResolver and BeanNameViewResolver beans是视图解析器
  2. 包括WebJars 在内的静态资源加载
  3. 自动注册类型转换器(可以自动封装转换对象)
  4. 支持一些消息格式的转换
  5. 可以自定义一些错误消息分析器
  6. 支持首页映射
  7. 支持图标自定义
  8. 支持web初始化绑定

如果想要在上面配置的基础上进行拓展添加一些组件MVC configuration (interceptors, formatters, view controllers, and other features),那么我们只需要自己写一个配置类即可,这个配置类进行以下配置:

  1. 在Config包新建一个类(只是一般习惯,不是强制要求)
  2. @Configuration注释,标注这是一个配置类
  3. 实现WebMvcConfigurer接口,让当前类作为实现类

然后我们就可以在类里面通过@Override重写WebMvcConfigurer接口的方法,然后就可以通过重写方法添加我们的功能组件(例如添加视图解析器),下面是一个通过重写WebMvcConfigurer接口的addViewControllers方法就可以添加一个视图跳转

代码语言:javascript复制
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
    //添加一个视图跳转功能
    @override
    public void addViewControllers (ViewControllerRegistry registry) {
    //浏览器发送/kuang,就会跳转到success页面;
    registry.addViewController(" /h0cksr" ).setViewName( "success") ;
    }
}

众多的自动配置原理都是一样的,通过这个WebMVC的自动配置

SpringBoot在自动配置很多组件的时候,先看容器中有没有用户自己配置的(如果用户自己配置@bean),如果有就用用户配置的,如果没有就用自动配置的;如果有些组件可以存在多个,比如我们的视图解析器,就将用户配置的和自己默认的组合起来!

WebMVC全盘接管

上面需要注意的是我们不能让我们的配置类带@EnableWebMvc注释,不然的话这个类就不是MVC视图的配置拓展,而是MVC视图的配置接管了,首先我们要明白一点,这里的接管指的是接管自动导入全部默认配置的WebMvcAutoConfiguration类,因为添加了这个注释之后WebMvcAutoConfiguration机会因为不满足@ConditionalOnMissingBean注解而全盘崩溃从而被接管,接管它的类就是@ConditionalOnMissingBean判断的类WebMvcConfigurationSupport,这个类是一个接口,在@EnableWebMvc注释中导入的DelegatingWebMvcConfiguration类就是接口的实现类,下面跟进源码分析一下:

  1. 先看一下自动导入配置的WebMvcAutoConfiguration @ConditionalOnxxx注解表示的是判断条件,ConditionalOnMissingBean表示只有参数中的类不存在时才生效,而@EnableWebMvc注释就实现了这个判断类,
  2. 下面进入@EnableWebMvc查看,可以看到添加了@EnableWebMvc注释之后主要就是导入一个类
  3. 跟进看到DelegatingWebMvcConfiguration实现了WebMvcConfigurationSupport接口
  4. 因为接口实现所以WebMvcAutoConfiguration被接管

0 人点赞