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");
    }

在这里插入图片描述
.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值