Spring Boot 為 Spring MVC 提供了自動配置,適用于大多數應用程序。
官方文檔描述:
自動配置在 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是個接口
創建一個MyMvcConfig實現這個接口
之前我們學的視圖解析器是我們手動配置
ViewResolver 實現了視圖解析器接口的類,就看做是視圖解析器
搜索ContentNegotiatingViewResolver,找到如下方法resolveViewName!找到對應的視圖解析代碼
從 getCandidateViews中看到它是把所有的視圖解析器拿來,進行遍歷循環
結論:ContentNegotiatingViewResolver 這個視圖解析器就是用來組合所有的視圖解析器的
可以看出它是從容器中去找視圖解析器,我們也可以在容器中實現一個視圖解析器!
容器中實現一個視圖解析器
1、我們在主程序中去寫一個視圖解析器;
2、如何看我們自己寫的視圖解析器是否起了作用呢?
我們給 DispatcherServlet 中的 doDispatch方法 加個斷點進行調試一下,因為所有的請求都會走到這個方法中!
3、我們啟動我們的項目,然后隨便訪問一個頁面,看一下Debug信息,找到this
4、找到視圖解析器,我們看到我們自己定義的就在這里了;
所以說,我們如果想要使用diy定制的東西,我們只需要給容器中添加這個組件就好了,SpringBoot就會幫我們自動裝配!
轉換器和格式化器
找到格式化轉換器:
點進去可以看到
如果配置了自己的格式化方式,就會注冊到Bean中生效,我們可以在配置文件中配置日期格式化的規則:可以看到在我們的Properties文件中,我們可以進行自動配置它!
修改SpringBoot的默認配置
結論:我們要擴展SpringMVC,官方就推薦我們這么去使用,既保SpringBoot留所有的自動配置,也能用我們擴展的配置!
分析一下原理:
1、WebMvcAutoConfiguration 是 SpringMVC的自動配置類,里面有一個類WebMvcAutoConfigurationAdapter
2、這個類上有一個注解,在做其他自動配置時會導入:@Import(EnableWebMvcConfiguration.class)
3、我們點進EnableWebMvcConfiguration這個類看一下,它繼承了一個父類:DelegatingWebMvcConfiguration
這個父類中有這樣一段代碼:
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、這里看到它是導入了一個類,繼續點進去看
2、它繼承了一個父類 WebMvcConfigurationSupport
3、回顧一下Webmvc自動配置類
總結:@EnableWebMvc將WebMvcConfigurationSupport組件導入進來;
而導入的WebMvcConfigurationSupport只是SpringMVC最基本的功能!
到此這篇關于Java深入淺出掌握SpringBoot之MVC自動配置原理篇的文章就介紹到這了,更多相關Java SpringBoot MVC自動配置內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/weixin_48838340/article/details/120628025