亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java深入淺出掌握SpringBoot之MVC自動配置原理篇

 更新時間:2021年10月27日 09:05:26   作者:龍弟-idea  
在進行項目編寫前,我們還需要知道一個東西,就是SpringBoot對我們的SpringMVC還做了哪些配置,包括如何擴展,如何定制,只有把這些都搞清楚了,我們在之后使用才會更加得心應(yīng)手

Spring Boot 為 Spring MVC 提供了自動配置,適用于大多數(shù)應(yīng)用程序。

官方文檔描述:

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

從官方描述解析:

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是個接口

創(chuàng)建一個MyMvcConfig實現(xiàn)這個接口

之前我們學(xué)的視圖解析器是我們手動配置

ViewResolver 實現(xiàn)了視圖解析器接口的類,就看做是視圖解析器

搜索ContentNegotiatingViewResolver,找到如下方法resolveViewName!找到對應(yīng)的視圖解析代碼

從 getCandidateViews中看到它是把所有的視圖解析器拿來,進行遍歷循環(huán)

結(jié)論:ContentNegotiatingViewResolver 這個視圖解析器就是用來組合所有的視圖解析器的

可以看出它是從容器中去找視圖解析器,我們也可以在容器中實現(xiàn)一個視圖解析器!

容器中實現(xiàn)一個視圖解析器

1、我們在主程序中去寫一個視圖解析器;

2、如何看我們自己寫的視圖解析器是否起了作用呢?

我們給 DispatcherServlet 中的 doDispatch方法 加個斷點進行調(diào)試一下,因為所有的請求都會走到這個方法中!

3、我們啟動我們的項目,然后隨便訪問一個頁面,看一下Debug信息,找到this

4、找到視圖解析器,我們看到我們自己定義的就在這里了;

所以說,我們?nèi)绻胍褂胐iy定制的東西,我們只需要給容器中添加這個組件就好了,SpringBoot就會幫我們自動裝配!

轉(zhuǎn)換器和格式化器

找到格式化轉(zhuǎn)換器:

點進去可以看到

如果配置了自己的格式化方式,就會注冊到Bean中生效,我們可以在配置文件中配置日期格式化的規(guī)則:可以看到在我們的Properties文件中,我們可以進行自動配置它!

修改SpringBoot的默認配置

結(jié)論:我們要擴展SpringMVC,官方就推薦我們這么去使用,既保SpringBoot留所有的自動配置,也能用我們擴展的配置!

分析一下原理:

1、WebMvcAutoConfiguration 是 SpringMVC的自動配置類,里面有一個類WebMvcAutoConfigurationAdapter

2、這個類上有一個注解,在做其他自動配置時會導(dǎo)入:@Import(EnableWebMvcConfiguration.class)

3、我們點進EnableWebMvcConfiguration這個類看一下,它繼承了一個父類:DelegatingWebMvcConfiguration

這個父類中有這樣一段代碼:

4、我們可以在這個類中去尋找一個我們剛才設(shè)置的viewController當(dāng)做參考,發(fā)現(xiàn)它調(diào)用了一個

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

5、我們點進去看一下

 
public void addViewControllers(ViewControllerRegistry registry) {
    Iterator var2 = this.delegates.iterator();
 
    while(var2.hasNext()) {
        // 將所有的WebMvcConfigurer相關(guān)配置來一起調(diào)用!包括我們自己配置的和Spring給我們配置的
        WebMvcConfigurer delegate = (WebMvcConfigurer)var2.next();
        delegate.addViewControllers(registry);
    }
 
}

結(jié)論:所有的WebMvcConfiguration都會被作用,不止Spring自己的配置類,我們自己的配置類當(dāng)然也會被調(diào)用

全面接管SpringMVC

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

只需在我們的配置類中要加一個@EnableWebMvc。

我們開發(fā)中,不推薦使用全面接管SpringMVC

1、這里看到它是導(dǎo)入了一個類,繼續(xù)點進去看

2、它繼承了一個父類 WebMvcConfigurationSupport

3、回顧一下Webmvc自動配置類

總結(jié):@EnableWebMvc將WebMvcConfigurationSupport組件導(dǎo)入進來;

而導(dǎo)入的WebMvcConfigurationSupport只是SpringMVC最基本的功能!

到此這篇關(guān)于Java深入淺出掌握SpringBoot之MVC自動配置原理篇的文章就介紹到這了,更多相關(guān)Java SpringBoot MVC自動配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mybatis的幾種傳參方式詳解

    Mybatis的幾種傳參方式詳解

    這篇文章主要介紹了Mybatis的幾種傳參方式詳解,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • 簡單驗證碼生成Java版

    簡單驗證碼生成Java版

    這篇文章主要為大家詳細介紹了簡單驗證碼生成Java版,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • SpringBoot中的bean管理示例詳解

    SpringBoot中的bean管理示例詳解

    這篇文章主要介紹了SpringBoot中的bean管理,本文結(jié)合示例代碼給大家講解的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • Java BufferedImage轉(zhuǎn)換為MultipartFile方式

    Java BufferedImage轉(zhuǎn)換為MultipartFile方式

    這篇文章主要介紹了Java BufferedImage轉(zhuǎn)換為MultipartFile方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java實現(xiàn)簡單三子棋游戲

    java實現(xiàn)簡單三子棋游戲

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單三子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java設(shè)計模式以虹貓藍兔的故事講解適配器模式

    Java設(shè)計模式以虹貓藍兔的故事講解適配器模式

    適配器模式(Adapter?Pattern)是作為兩個不兼容的接口之間的橋梁。這種類型的設(shè)計模式屬于結(jié)構(gòu)型模式,它結(jié)合了兩個獨立接口的功能
    2022-04-04
  • springboot手寫一個自己的starter源碼

    springboot手寫一個自己的starter源碼

    在本篇文章里小編給大家整理了關(guān)于springboot手寫一個自己的starter源碼的全部知識點內(nèi)容,需要的朋友們學(xué)習(xí)下。
    2019-06-06
  • Java項目打包部署之部署jar包和war包

    Java項目打包部署之部署jar包和war包

    我們在開發(fā)環(huán)境部署項目一般通過ideal將項目打包成包,然后連接linux服務(wù)器,這篇文章主要給大家介紹了關(guān)于Java項目打包部署之部署jar包和war包的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • Javaweb實現(xiàn)郵件發(fā)送

    Javaweb實現(xiàn)郵件發(fā)送

    這篇文章主要為大家詳細介紹了Javaweb實現(xiàn)郵件發(fā)送,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • java中如何實現(xiàn)對類的對象進行排序

    java中如何實現(xiàn)對類的對象進行排序

    在本篇文章里小編給各位整理一篇關(guān)于java中如何實現(xiàn)對類的對象進行排序知識點內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2020-02-02

最新評論