SpringBoot——MVC自动配置原理

简介: SpringBoot——MVC自动配置原理

目录


官方文档描述:


扩展SpringMVC


容器中实现一个视图解析器


转换器和格式化器


修改SpringBoot的默认配置


全面接管SpringMVC


Spring Boot 为 Spring MVC 提供了自动配置,适用于大多数应用程序。


官方文档描述:

自动配置在 Spring 的默认值之上添加了以下功能:

image.png

从官方描述解析:

If you want to keep Spring Boot MVC features and you want to add 
additionalMVC configuration (interceptors, formatters, view controllers, 
and other features), you can add your own 
@Configuration class of type WebMvcConfigurer but without @EnableWebMvc.

扩展SpringMVC

由于WebMvcConfigurer是个接口

image.png

创建一个MyMvcConfig实现这个接口

image.png

image.png

之前我们学的视图解析器是我们手动配置

image.png

ViewResolver  实现了视图解析器接口的类,就看做是视图解析器

image.png

搜索ContentNegotiatingViewResolver,找到如下方法resolveViewName!找到对应的视图解析代码

image.png

从 getCandidateViews中看到它是把所有的视图解析器拿来,进行遍历循环

image.png

结论:ContentNegotiatingViewResolver 这个视图解析器就是用来组合所有的视图解析器的

image.png

可以看出它是从容器中去找视图解析器,我们也可以在容器中实现一个视图解析器!

容器中实现一个视图解析器

1、我们在主程序中去写一个视图解析器;

image.png

2、如何看我们自己写的视图解析器是否起了作用呢?

我们给 DispatcherServlet 中的 doDispatch方法 加个断点进行调试一下,因为所有的请求都会走到这个方法中!

image.png

3、我们启动我们的项目,然后随便访问一个页面,看一下Debug信息,找到this

image.png

4、找到视图解析器,我们看到我们自己定义的就在这里了;

image.png

所以说,我们如果想要使用diy定制的东西,我们只需要给容器中添加这个组件就好了,SpringBoot就会帮我们自动装配!

转换器和格式化器

找到格式化转换器:

image.png

点进去可以看到

image.png

如果配置了自己的格式化方式,就会注册到Bean中生效,我们可以在配置文件中配置日期格式化的规则:可以看到在我们的Properties文件中,我们可以进行自动配置它!

image.png

image.png

修改SpringBoot的默认配置

image.png

image.png

结论:我们要扩展SpringMVC,官方就推荐我们这么去使用,既保SpringBoot留所有的自动配置,也能用我们扩展的配置!


分析一下原理:


1、WebMvcAutoConfiguration 是 SpringMVC的自动配置类,里面有一个类WebMvcAutoConfigurationAdapter


2、这个类上有一个注解,在做其他自动配置时会导入:@Import(EnableWebMvcConfiguration.class)


3、我们点进EnableWebMvcConfiguration这个类看一下,它继承了一个父类:DelegatingWebMvcConfiguration


这个父类中有这样一段代码:

image.png

4、我们可以在这个类中去寻找一个我们刚才设置的viewController当做参考,发现它调用了一个

protected void addViewControllers(ViewControllerRegistry registry) {
    this.configurers.addViewControllers(registry);
}

5、我们点进去看一下

public void addViewControllers(ViewControllerRegistry registry) {
    Iterator var2 = this.delegates.iterator();
    while(var2.hasNext()) {
        // 将所有的WebMvcConfigurer相关配置来一起调用!包括我们自己配置的和Spring给我们配置的
        WebMvcConfigurer delegate = (WebMvcConfigurer)var2.next();
        delegate.addViewControllers(registry);
    }
}

结论:所有的WebMvcConfiguration都会被作用,不止Spring自己的配置类,我们自己的配置类当然也会被调用


全面接管SpringMVC

全面接管即:SpringBoot对SpringMVC的自动配置不需要了,所有都是我们自己去配置!


只需在我们的配置类中要加一个@EnableWebMvc。


我们开发中,不推荐使用全面接管SpringMVC


1、这里看到它是导入了一个类,继续点进去看

image.png

2、它继承了一个父类 WebMvcConfigurationSupport

image.png

3、回顾一下Webmvc自动配置类

image.png

总结:@EnableWebMvc将WebMvcConfigurationSupport组件导入进来;

而导入的WebMvcConfigurationSupport只是SpringMVC最基本的功能!

相关文章
|
3月前
|
人工智能 Java 开发者
【Spring】原理解析:Spring Boot 自动配置
Spring Boot通过“约定优于配置”的设计理念,自动检测项目依赖并根据这些依赖自动装配相应的Bean,从而解放开发者从繁琐的配置工作中解脱出来,专注于业务逻辑实现。
1263 0
|
5月前
|
Java Spring 容器
SpringBoot自动配置的原理是什么?
Spring Boot自动配置核心在于@EnableAutoConfiguration注解,它通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类。这些类根据@Conditional系列注解判断是否生效。但Spring Boot 3.0后已弃用spring.factories,改用新格式的.imports文件进行配置。
932 0
|
2月前
|
前端开发 Java 微服务
《深入理解Spring》:Spring、Spring MVC与Spring Boot的深度解析
Spring Framework是Java生态的基石,提供IoC、AOP等核心功能;Spring MVC基于其构建,实现Web层MVC架构;Spring Boot则通过自动配置和内嵌服务器,极大简化了开发与部署。三者层层演进,Spring Boot并非替代,而是对前者的高效封装与增强,适用于微服务与快速开发,而深入理解Spring Framework有助于更好驾驭整体技术栈。
|
2月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
320 3
|
2月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
410 3
|
3月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
583 5
|
3月前
|
传感器 Java 数据库
探索Spring Boot的@Conditional注解的上下文配置
Spring Boot 的 `@Conditional` 注解可根据不同条件动态控制 Bean 的加载,提升应用的灵活性与可配置性。本文深入解析其用法与优势,并结合实例展示如何通过自定义条件类实现环境适配的智能配置。
196 0
探索Spring Boot的@Conditional注解的上下文配置
|
4月前
|
安全 算法 Java
在Spring Boot中应用Jasypt以加密配置信息。
通过以上步骤,可以在Spring Boot应用中有效地利用Jasypt对配置信息进行加密,这样即使配置文件被泄露,其中的敏感信息也不会直接暴露给攻击者。这是一种在不牺牲操作复杂度的情况下提升应用安全性的简便方法。
1031 10
|
5月前
|
JSON 前端开发 Java
第05课:Spring Boot中的MVC支持
第05课:Spring Boot中的MVC支持
275 0
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
449 0

热门文章

最新文章