• SpringBoot 08 MVC扩展配置的原理


    8.1 MVC扩展配置的原理


    在这里插入图片描述
    意思是我们 如果想 自定义 MVC 或者 是 扩展 MVC,就必须 新建一个 配置类。然后 @Configuration 注解。@EnableWebMvc 就是直接托管。不会走默认的那些配置了。

    当然 我们还得 实现 WebMvcConfigurer 接口 才可以。

    在这里插入图片描述
    我们可以尝试 配置一个 自己的 视图解析器。

    1. 分析视图解析器类的源码 ContentNegotiatingViewResolver

    在这里插入图片描述
    我们 发现 只要 实现了 视图解析器 接口的类,就可以把它 作为视图解析器。否则 ContentNegotiatingViewResolver 这个类 也不能被 SpringMVC 应用。但这个类 是自动帮我们装配的嘛。

    1. 是如何被自动装配上的呢?
      在这里插入图片描述
      实现的这个 接口,有个 核心的方法。而且 还就这一个 方法。。我们去看看 我们 是怎么实现 这个方法的。在这里插入图片描述
      在这里插入图片描述
      有意思的地方来了,这里有行代码,是说 获取到 候选的视图。然后 再从这些 视图中 拿到 最好的 视图。

    那我们 来看下 获取候选视图 是怎么 获取的。

    在这里插入图片描述
    我们发现 它是 进行了 遍历,然后 判断视图 是否为空,不为空,就加入到 candidateViews 这个 List 当中去。那么问题来了。this.viewResolvers 是 怎么 拿到的 数据???

    答:直接 从 IOC 容器中 Bean 拿到的。就是 所谓的 注入,把这个东西注入进去了。

    那么 我们就可以大胆的猜想,是不是 只要我们写一个 视图解析器。然后 给它 放到 IOC 里面 就可以了呢。

    不知道大家是否还记得 SpringConfig 是怎么 把一个东西 配置到 IOC 容器中 成为 一个 Bean 的了。

    就是 我们 弄一个方法,然后 @Bean,这个方法 返回的 直接就是 一个类的 新建对象。

    1. 给 DispatcherServlet 打断点,来验证我们分析的原理正确
      在这里插入图片描述
      在这里插入图片描述
      看到没有,这里 是不是 就被 装配进去了。
      在这里插入图片描述

    因为我们配置的 这个 视图解析器,在 IOC 容器当中,直接就被 加到 viewResolvers 里面去了。在这里插入图片描述

    那 有的人 就要说了,怎么识别的呢?答:这还不简单嘛,识别它的类型呀,它的类型 是 ViewResolver 所以 会被 自动的装配。

    那么好,问题来了。我们 不用 @Bean ,而是 用 @Component 可以吗?

    答:可以!!当然可以。只要 把它 放到 IOC 容器中,喔脚德就没问题。

    在这里插入图片描述

    1. 再去 尝试下,重写 里面一些的方法。比如说 添加视图Controller 这玩意 我们 用 MVC 写的话,不就是 写一个方法,然后 注解嘛。那么这里的话,就是变化成了一个方法了,但是效果都一样!!!
        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            //WebMvcConfigurer.super.addViewControllers(registry);
    
            registry.addViewController("/mqy").setViewName("hello");
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述
    .

  • 相关阅读:
    北邮22信通:二叉树显示路径的两种方法 递归函数保存现场返回现场的实例
    学习计算机网络中的一些疑问及解答
    Biotin-C6-amine_N-生物素基-1,6-己二胺_CAS:65953-56-2_100mg
    Ajax的简单使用
    JavaScript——变量
    TSINGSEE视频AI智能分析技术:水泥厂安全生产智能监管解决方案
    【性能测试】Jenkins+Ant+Jmeter自动化框架的搭建思路
    李航《统计学习方法》笔记之感知机perceptron
    Mybatis Plugin插件
    【NodeJS编辑出现版本错误:is incompatible with this module】
  • 原文地址:https://blog.csdn.net/qq_52606908/article/details/126081144