最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Spring Boot中如何自定義SpringMVC配置

 更新時(shí)間:2021年09月18日 09:27:20   作者:拾階求上  
這篇文章主要給大家介紹了關(guān)于Spring Boot中如何自定義SpringMVC配置的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

前言

在 Spring Boot 框架中只需要在項(xiàng)目中引入 spring-boot-starter-web 依賴,SpringMVC 的一整套東西就會(huì)自動(dòng)給我們配置好;但是,真實(shí)的項(xiàng)目環(huán)境比較復(fù)雜,系統(tǒng)自帶的配置不一定滿足我們的需求,往往我們還需要結(jié)合實(shí)際情況自定義配置。
自定義配置就有講究了,由于 Spring Boot 的版本變遷,加上這一塊本身就有幾個(gè)不同寫法,容易搞混。

一、SpringBoot 中 SpringMVC 配置概述

首先我們需要明確,跟自定義 SpringMVC 相關(guān)的類和注解主要有如下四個(gè):

  • WebMvcConfigurerAdapter
  • WebMvcConfigurer
  • WebMvcConfigurationSupport
  • @EnableWebMvc

這四個(gè)中,除了 @EnableWebMvc 是注解外,WebMvcConfigurerAdapter 和 WebMvcConfigurationSupport 是兩個(gè)類,WebMvcConfigurer 是一個(gè)接口。里邊的方法看起來(lái)好像都類似,但是實(shí)際使用效果卻大不相同。

二、WebMvcConfigurerAdapter 抽象類

我們先來(lái)看 WebMvcConfigurerAdapter,這個(gè)是在 Spring Boot 1.x 中我們自定義 SpringMVC 時(shí)繼承的一個(gè)抽象類。
這個(gè)抽象類本身是實(shí)現(xiàn)了 WebMvcConfigurer 接口,然后抽象類里邊都是空方法,我們來(lái)看一下這個(gè)類的聲明:

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

再來(lái)看看這個(gè)類的注釋:

/**
 * An implementation of {@link WebMvcConfigurer} with empty methods allowing
 * subclasses to override only the methods they're interested in.
 * @deprecated as of 5.0 {@link WebMvcConfigurer} has default methods (made
 * possible by a Java 8 baseline) and can be implemented directly without the
 * need for this adapter
 */

這段注釋關(guān)于這個(gè)類說(shuō)的很明白了。

同時(shí)我們也看到,從 Spring5 開(kāi)始,由于我們要使用 Java8,而 Java8 中的接口允許存在 default 方法,因此官方建議我們直接實(shí)現(xiàn) WebMvcConfigurer 接口,而不是繼承 WebMvcConfigurerAdapter。

也就是說(shuō),在 Spring Boot 1.x 的時(shí)代,如果我們需要自定義 SpringMVC 配置,直接繼承 WebMvcConfigurerAdapter 類即可。

三、WebMvcConfigurer 接口

如上所述,WebMvcConfigurer 是在 Spring Boot 2.x 中實(shí)現(xiàn)自定義配置的方案。

WebMvcConfigurer 是一個(gè)接口;接口中的方法和 WebMvcConfigurerAdapter 中定義的空方法其實(shí)一樣,所以用法上來(lái)說(shuō),基本上沒(méi)有差別。

從 Spring Boot 1.x 切換到 Spring Boot 2.x ,只需要把繼承類改成實(shí)現(xiàn)接口即可。

四、WebMvcConfigurationSupport 類-自定義配置

在 Spring 框架中,可以通過(guò) Spring 和 SpringMVC 的XML 配置文件設(shè)置MVC 框架;在 Spring Boot 中自定義 SpringMVC 配置時(shí),可以通過(guò)繼承 WebMvcConfigurationSupport 類來(lái)實(shí)現(xiàn)。

在 WebMvcConfigurationSupport 類中,提供了用 Java 配置 SpringMVC 所需要的所有方法。我們來(lái)看一下這個(gè)方法的摘要:


WebMvcConfigurationSupport 類方法列表

有一點(diǎn)眼熟,可能有小伙伴發(fā)現(xiàn)了,這里的方法其實(shí)和前面兩個(gè)類中的方法基本是一樣的。

在這里首先大家需要明確的是,WebMvcConfigurationSupport 類本身是沒(méi)有問(wèn)題的,我們自定義 SpringMVC 的配置是可以通過(guò)繼承 WebMvcConfigurationSupport 來(lái)實(shí)現(xiàn)的。

五、WebMvcAutoConfiguration 配置類 – 自動(dòng)化配置

Spring Boot 中,SpringMVC 相關(guān)的自動(dòng)化配置是在 WebMvcAutoConfiguration 配置類中實(shí)現(xiàn)的。
那么我們來(lái)看看這個(gè)配置類的生效條件:

@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 {
}

我們從這個(gè)類的注解中可以看到,它的生效條件有一條,就是當(dāng)不存在 WebMvcConfigurationSupport 的實(shí)例時(shí),這個(gè)自動(dòng)化配置才會(huì)生生效。

因此,如果我們?cè)?Spring Boot 中自定義 SpringMVC 配置時(shí)選擇了繼承 WebMvcConfigurationSupport,就會(huì)導(dǎo)致 Spring Boot 中 SpringMVC 的自動(dòng)化配置失效。

Spring Boot 給我們提供了很多自動(dòng)化配置,很多時(shí)候當(dāng)我們修改這些配置的時(shí)候,并不是要全盤否定 Spring Boot 提供的自動(dòng)化配置。

我們可能只是針對(duì)某一個(gè)配置做出修改,其他的配置還是按照 Spring Boot 默認(rèn)的自動(dòng)化配置來(lái)。

而繼承 WebMvcConfigurationSupport 來(lái)實(shí)現(xiàn)對(duì) SpringMVC 的配置會(huì)導(dǎo)致所有的 SpringMVC 自動(dòng)化配置失效,因此,一般情況下我們不選擇這種方案。

六、@EnableWebMvc 注解

最后還有一個(gè) @EnableWebMvc 注解,這個(gè)注解很好理解,它的作用就是啟用 WebMvcConfigurationSupport。
我們來(lái)看看這個(gè)注解的定義:

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

可以看到,加了這個(gè)注解,就會(huì)自動(dòng)導(dǎo)入 WebMvcConfigurationSupport。

所以在 Spring Boot 中,我們也不建議使用 @EnableWebMvc 注解,因?yàn)樗粯訒?huì)導(dǎo)致 Spring Boot 中的 SpringMVC 自動(dòng)化配置失效。

七、總結(jié)

不知道上面的解釋小伙伴有沒(méi)有看懂?我再簡(jiǎn)單總結(jié)一下:

  1. Spring Boot 1.x 中,自定義 SpringMVC 配置可以通過(guò)繼承 WebMvcConfigurerAdapter 來(lái)實(shí)現(xiàn)。
  2. Spring Boot 2.x 中,自定義 SpringMVC 配置可以通過(guò)實(shí)現(xiàn) WebMvcConfigurer 接口來(lái)完成。

如果在 Spring Boot 中使用繼承 WebMvcConfigurationSupport 來(lái)實(shí)現(xiàn)自定義 SpringMVC 配置,或者在 Spring Boot 中使用了 @EnableWebMvc 注解,都會(huì)導(dǎo)致 Spring Boot 中默認(rèn)的 SpringMVC 自動(dòng)化配置失效。

在純 Java 配置的 SSM 環(huán)境中,如果我們要自定義 SpringMVC 配置,有兩種辦法:

  1. 第一種就是直接繼承自 WebMvcConfigurationSupport 來(lái)完成 SpringMVC 配置
  2. 還有一種方案就是實(shí)現(xiàn) WebMvcConfigurer 接口來(lái)完成自定義 SpringMVC 配置

果使用第二種方式,則需要給 SpringMVC 的配置類上額外添加 @EnableWebMvc 注解,表示啟用WebMvcConfigurationSupport,這樣配置才會(huì)生效。

換句話說(shuō),在純 Java 配置的 SSM 中,如果你需要自定義 SpringMVC 配置,你離不開(kāi) WebMvcConfigurationSupport ,所以在這種情況下建議通過(guò)繼承 WebMvcConfigurationSupport 來(lái)實(shí)現(xiàn)自動(dòng)化配置。

相關(guān)文章

  • springboot?接收LocalDateTime方式

    springboot?接收LocalDateTime方式

    這篇文章主要介紹了springboot?接收LocalDateTime方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • SpringBoot中攔截器和動(dòng)態(tài)代理的區(qū)別詳解

    SpringBoot中攔截器和動(dòng)態(tài)代理的區(qū)別詳解

    在?Spring?Boot?中,攔截器和動(dòng)態(tài)代理都是用來(lái)實(shí)現(xiàn)功能增強(qiáng)的,所以在很多時(shí)候,有人會(huì)認(rèn)為攔截器的底層是通過(guò)動(dòng)態(tài)代理實(shí)現(xiàn)的,所以本文就來(lái)盤點(diǎn)一下他們兩的區(qū)別,以及攔截器的底層實(shí)現(xiàn)吧
    2023-09-09
  • 背包問(wèn)題-動(dòng)態(tài)規(guī)劃java實(shí)現(xiàn)的分析與代碼

    背包問(wèn)題-動(dòng)態(tài)規(guī)劃java實(shí)現(xiàn)的分析與代碼

    這篇文章主要給大家介紹了關(guān)于背包問(wèn)題動(dòng)態(tài)規(guī)劃java實(shí)現(xiàn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 使用spring-boot-admin對(duì)spring-boot服務(wù)進(jìn)行監(jiān)控的實(shí)現(xiàn)方法

    使用spring-boot-admin對(duì)spring-boot服務(wù)進(jìn)行監(jiān)控的實(shí)現(xiàn)方法

    這篇文章主要介紹了使用spring-boot-admin對(duì)spring-boot服務(wù)進(jìn)行監(jiān)控的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2018-02-02
  • RestTemplate使用之如何設(shè)置請(qǐng)求頭、請(qǐng)求體

    RestTemplate使用之如何設(shè)置請(qǐng)求頭、請(qǐng)求體

    這篇文章主要介紹了RestTemplate使用之如何設(shè)置請(qǐng)求頭、請(qǐng)求體問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 顯示SonarQube私有項(xiàng)目徽章方案流程

    顯示SonarQube私有項(xiàng)目徽章方案流程

    這篇文章主要為大家介紹了如何顯示SonarQube私有項(xiàng)目徽章方案的流程,sonarQube目前不支持私有項(xiàng)目的徽章圖片獲取,這個(gè)問(wèn)題早在?2018年就在sonar社區(qū)里有過(guò)激烈的討論,至今無(wú)果,只能自己尋求一種可以快速實(shí)施的方案
    2022-02-02
  • springboot?去掉netflix?禁用Eureka的解決方法

    springboot?去掉netflix?禁用Eureka的解決方法

    這篇文章主要介紹了springboot?去掉netflix?禁用Eureka的解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • IntelliJ?IDEA?2023版本創(chuàng)建Spring項(xiàng)目時(shí)Java只能選擇17或21的問(wèn)題解決方法

    IntelliJ?IDEA?2023版本創(chuàng)建Spring項(xiàng)目時(shí)Java只能選擇17或21的問(wèn)題解決方法

    spring-boot是一個(gè)基于Java的開(kāi)源框架,用于快速構(gòu)建生產(chǎn)級(jí)別的應(yīng)用程序,這篇文章主要給大家介紹了關(guān)于IntelliJ?IDEA?2023版本創(chuàng)建Spring項(xiàng)目時(shí)Java只能選擇17或21的問(wèn)題解決方法,需要的朋友可以參考下
    2024-07-07
  • SpringBoot @SpringBootTest加速單元測(cè)試的小訣竅

    SpringBoot @SpringBootTest加速單元測(cè)試的小訣竅

    這篇文章主要介紹了SpringBoot @SpringBootTest加速單元測(cè)試的小訣竅,具有很好的參考價(jià)值,對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • JSONObject如何轉(zhuǎn)為實(shí)體類對(duì)象

    JSONObject如何轉(zhuǎn)為實(shí)體類對(duì)象

    介紹了JSONObject轉(zhuǎn)為實(shí)體類對(duì)象的三種方法:JSONObject中的toJavaObject方法和getObject方法支持深轉(zhuǎn)換,而JSON中的parseObject方法只能轉(zhuǎn)換一層對(duì)象,此外,還補(bǔ)充說(shuō)明了在對(duì)JSON轉(zhuǎn)為實(shí)體類對(duì)象時(shí),無(wú)論JSON中的數(shù)據(jù)字段是否多于或少于實(shí)體類中字段,轉(zhuǎn)化都不會(huì)報(bào)錯(cuò)
    2024-11-11

最新評(píng)論

灵丘县| 广安市| 莆田市| 元朗区| 承德县| 石林| 水富县| 马边| 大姚县| 牟定县| 五莲县| 赣州市| 金昌市| 桂阳县| 黑河市| 北海市| 梨树县| 眉山市| 行唐县| 光泽县| 卓尼县| 扎鲁特旗| 左权县| 万山特区| 鄂托克前旗| 阜新市| 常德市| 左贡县| 泽普县| 册亨县| 阿坝县| 奉节县| 九寨沟县| 桃园县| 巧家县| 临高县| 天门市| 荥阳市| 淮南市| 墨玉县| 黔西县|