iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >详解Spring Boot中如何自定义SpringMVC配置
  • 452
分享到

详解Spring Boot中如何自定义SpringMVC配置

2024-04-02 19:04:59 452人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录前言一、SpringBoot 中 springMVC 配置概述二、WEBmvcConfigurerAdapter 抽象类三、WebMvcConfigurer 接口四、WebMvc

前言

Spring Boot 框架中只需要在项目中引入 spring-boot-starter-web 依赖,SpringMVC 的一整套东西就会自动给我们配置好;但是,真实的项目环境比较复杂,系统自带的配置不一定满足我们的需求,往往我们还需要结合实际情况自定义配置。
自定义配置就有讲究了,由于 Spring Boot 的版本变迁,加上这一块本身就有几个不同写法,容易搞混。

一、SpringBoot 中 SpringMVC 配置概述

首先我们需要明确,跟自定义 SpringMVC 相关的类和注解主要有如下四个:

  • WebMvcConfigurerAdapter
  • WebMvcConfigurer
  • WebMvcConfigurationSupport
  • @EnableWebMvc

这四个中,除了 @EnableWebMvc 是注解外,WebMvcConfigurerAdapter 和 WebMvcConfigurationSupport 是两个类,WebMvcConfigurer 是一个接口。里边的方法看起来好像都类似,但是实际使用效果却大不相同。

二、WebMvcConfigurerAdapter 抽象类

我们先来看 WebMvcConfigurerAdapter,这个是在 Spring Boot 1.x 中我们自定义 SpringMVC 时继承的一个抽象类。
这个抽象类本身是实现了 WebMvcConfigurer 接口,然后抽象类里边都是空方法,我们来看一下这个类的声明:


public abstract class WebMvcConfigurerAdapter implements WebMvcConfigurer {
    //各种 SpringMVC 配置的方法
}

再来看看这个类的注释:



这段注释关于这个类说的很明白了。

同时我们也看到,从 Spring5 开始,由于我们要使用 Java8,而 Java8 中的接口允许存在 default 方法,因此官方建议我们直接实现 WebMvcConfigurer 接口,而不是继承 WebMvcConfigurerAdapter。

也就是说,在 Spring Boot 1.x 的时代,如果我们需要自定义 SpringMVC 配置,直接继承 WebMvcConfigurerAdapter 类即可。

三、WebMvcConfigurer 接口

如上所述,WebMvcConfigurer 是在 Spring Boot 2.x 中实现自定义配置的方案。

WebMvcConfigurer 是一个接口;接口中的方法和 WebMvcConfigurerAdapter 中定义的空方法其实一样,所以用法上来说,基本上没有差别。

从 Spring Boot 1.x 切换到 Spring Boot 2.x ,只需要把继承类改成实现接口即可。

四、WebMvcConfigurationSupport 类-自定义配置

在 Spring 框架中,可以通过 Spring 和 SpringMVC 的XML 配置文件设置MVC 框架;在 Spring Boot 中自定义 SpringMVC 配置时,可以通过继承 WebMvcConfigurationSupport 类来实现。

在 WebMvcConfigurationSupport 类中,提供了用 Java 配置 SpringMVC 所需要的所有方法。我们来看一下这个方法的摘要:


WebMvcConfigurationSupport 类方法列表

有一点眼熟,可能有小伙伴发现了,这里的方法其实和前面两个类中的方法基本是一样的。

在这里首先大家需要明确的是,WebMvcConfigurationSupport 类本身是没有问题的,我们自定义 SpringMVC 的配置是可以通过继承 WebMvcConfigurationSupport 来实现的。

五、WebMvcAutoConfiguration 配置类 – 自动化配置

Spring Boot 中,SpringMVC 相关的自动化配置是在 WebMvcAutoConfiguration 配置类中实现的。
那么我们来看看这个配置类的生效条件:


@Configuration
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
@AutoConfigureAfter({ DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class,
        ValidationAutoConfiguration.class })
public class WebMvcAutoConfiguration {
}

我们从这个类的注解中可以看到,它的生效条件有一条,就是当不存在 WebMvcConfigurationSupport 的实例时,这个自动化配置才会生生效。

因此,如果我们在 Spring Boot 中自定义 SpringMVC 配置时选择了继承 WebMvcConfigurationSupport,就会导致 Spring Boot 中 SpringMVC 的自动化配置失效。

Spring Boot 给我们提供了很多自动化配置,很多时候当我们修改这些配置的时候,并不是要全盘否定 Spring Boot 提供的自动化配置。

我们可能只是针对某一个配置做出修改,其他的配置还是按照 Spring Boot 默认的自动化配置来。

而继承 WebMvcConfigurationSupport 来实现对 SpringMVC 的配置会导致所有的 SpringMVC 自动化配置失效,因此,一般情况下我们不选择这种方案。

六、@EnableWebMvc 注解

最后还有一个 @EnableWebMvc 注解,这个注解很好理解,它的作用就是启用 WebMvcConfigurationSupport。
我们来看看这个注解的定义:


/**
 * Adding this annotation to an {@code @Configuration} class imports the Spring MVC
 * configuration from {@link WebMvcConfigurationSupport}, e.g.:

可以看到,加了这个注解,就会自动导入 WebMvcConfigurationSupport。

所以在 Spring Boot 中,我们也不建议使用 @EnableWebMvc 注解,因为它一样会导致 Spring Boot 中的 SpringMVC 自动化配置失效。

七、总结

不知道上面的解释小伙伴有没有看懂?我再简单总结一下:

  1. Spring Boot 1.x 中,自定义 SpringMVC 配置可以通过继承 WebMvcConfigurerAdapter 来实现。
  2. Spring Boot 2.x 中,自定义 SpringMVC 配置可以通过实现 WebMvcConfigurer 接口来完成。

如果在 Spring Boot 中使用继承 WebMvcConfigurationSupport 来实现自定义 SpringMVC 配置,或者在 Spring Boot 中使用了 @EnableWebMvc 注解,都会导致 Spring Boot 中默认的 SpringMVC 自动化配置失效。

在纯 Java 配置的 SSM 环境中,如果我们要自定义 SpringMVC 配置,有两种办法:

  1. 第一种就是直接继承自 WebMvcConfigurationSupport 来完成 SpringMVC 配置
  2. 还有一种方案就是实现 WebMvcConfigurer 接口来完成自定义 SpringMVC 配置

果使用第二种方式,则需要给 SpringMVC 的配置类上额外添加 @EnableWebMvc 注解,表示启用WebMvcConfigurationSupport,这样配置才会生效。

换句话说,在纯 Java 配置的 SSM 中,如果你需要自定义 SpringMVC 配置,你离不开 WebMvcConfigurationSupport ,所以在这种情况下建议通过继承 WebMvcConfigurationSupport 来实现自动化配置。

--结束END--

本文标题: 详解Spring Boot中如何自定义SpringMVC配置

本文链接: https://www.lsjlt.com/news/136116.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解Spring Boot中如何自定义SpringMVC配置
    目录前言一、SpringBoot 中 SpringMVC 配置概述二、WebMvcConfigurerAdapter 抽象类三、WebMvcConfigurer 接口四、WebMvc...
    99+
    2024-04-02
  • spring boot如何实现自定义配置源
    这篇文章给大家分享的是有关spring boot如何实现自定义配置源的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。概述我们知道,在Spring boot中可以通过xml或者@ImportResource 来引入自...
    99+
    2023-05-30
    springboot
  • Spring Boot读取自定义配置文件
    目录@Value @ConfigurationProperties 显式注入 Spring IoC @EnableConfigurationProperties @Configura...
    99+
    2024-04-02
  • Spring Boot如何自定义starter
    这篇文章主要介绍Spring Boot如何自定义starter,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、简介SpringBoot 最强大的功能就是把我们常用的场景抽取成了一个个starter(场景启动器),我...
    99+
    2023-06-02
  • Spring Boot之FilterRegistrationBean-自定义Filter详解
    Spring Boot之FilterRegistrationBean-自定义Filter 项目老的用spring写的,新的升级到了springboot,原代码中有在web.xml中定...
    99+
    2024-04-02
  • Spring boot 自定义 Starter及自动配置的方法
    目录Starter 组件简介自定义 Starter 组件Starter 组件使用 StarterStarter 传参自身与第三方维护Starter 组件简介 Starter 组件是 ...
    99+
    2022-12-08
    Spring boot 自定义 Starter Spring boot自动配置
  • Spring Boot如何读取自定义外部属性详解
    测试的环境:Spring Boot2 + Maven +lombok 准备需要用到的基础类: public class People { private String n...
    99+
    2024-04-02
  • Spring Boot 注解方式自定义Endpoint详解
    目录概述准备编写自定义Endpoint配置启动&测试注意Spring Boot 常用endpoint的使用Actuator一些常用 Endpoint如何访问 Actuator...
    99+
    2024-04-02
  • Spring Boot怎么读取自定义配置文件
    这篇文章给大家分享的是有关Spring Boot怎么读取自定义配置文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。@Value首先,会想到使用@Value注解,该注解只能去解析yaml文件中的简单类型,并绑定到...
    99+
    2023-06-15
  • Spring Boot下如何自定义Repository中的DAO方法
     环境配置介绍jdk 1.8, spring Boot 1.5.3.RELEASE, MySQL, Spring Data, JPA问题描述Spring Data提供了一套简单易用的DAO层抽象与封装,覆盖的CURD的基本功能,但...
    99+
    2023-05-31
    spring boot repository
  • 在Spring Boot项目中如何实现自定义PropertySourceLoader
    今天就跟大家聊聊有关在Spring Boot项目中如何实现自定义PropertySourceLoader,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。SpringBoot 的配置文件...
    99+
    2023-05-31
    propertysourceloader springboot ce
  • 在spring-boot项目中如何实现自定义filter
    在spring-boot项目中如何实现自定义filter?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。传统的javaEE增加Filter是在web.xml中配置...
    99+
    2023-05-31
    springboot 自定义 filter
  • Spring Boot的Profile配置详解
    Profile 是Spring Boot用来针对不同的环境对不同的配置提供的支持,全局Profile配置使用application-{profile}.properties,如: application-dev.properties 可以表...
    99+
    2023-05-31
    spring boot profile
  • Spring Boot自定义Starter组件开发实现配置过程
    目录自定义starter为什么要自定义starter自定义starter的命名规则实现方法引入依赖编写测试类创建配置类创建spring.factories文件乱码问题解决方案:1. ...
    99+
    2024-04-02
  • spring boot 日志配置详解
    最近在学习spring boot框架的路上,今日看了一下spring boot日志配置,顺便留个笔记记录一下。新建logback.xml文件 内容如下:<!-- Logback configuration. See http...
    99+
    2023-05-31
    spring boot 日志
  • JAVA Spring Boot 自动配置实现原理详解
    目录引言主启动类的注解@SpringBootApplication1、@SpringBootConfiguration2、@ComponentScan3、@EnableAutoCon...
    99+
    2024-04-02
  • Spring Boot实战教程之自动配置详解
    前言大家应该都有所了解,随着Ruby、Groovy等动态语言的流行,相比较之下Java的开发显得格外笨重。繁多的配置、低下的开发效率、复杂的部署流程以及第三方技术集成难度大等问题一直被人们所诟病。随着Spring家族中的新星Spring B...
    99+
    2023-05-31
    springboot 自动配置 之自
  • Java自定义Spring配置标签
    引言: 在Sping中,一般使用<bean>这样的元素来配置一个bean,Spring在创建容器的时候会扫描这些配置,根据配置创建对象存放于容器中,然后我们再从容器中取出...
    99+
    2024-04-02
  • Spring如何自定义注解
    这篇文章将为大家详细讲解有关Spring如何自定义注解,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。字段注解字段注解一般是用于校验字段是否满足要求,hibernate-validate依赖就提供了很多校验...
    99+
    2023-06-15
  • spring boot中的properties参数配置详解
    application.propertiesapplication.properties是spring boot默认的配置文件,spring boot默认会在以下两个路径搜索并加载这个文件src\main\resourcessrc\main...
    99+
    2023-05-31
    spring boot properties
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作