03.01 Spring MVC 到 Spring BOOT的簡化之路

背景

從Servlet技術到Spring和Spring MVC,開發Web應用變得越來越簡捷。但是Spring和Spring MVC的眾多配置有時卻讓人望而卻步,相信有過Spring MVC開發經驗的朋友能深刻體會到這一痛苦。因為即使是開發一個Hello-World的Web應用,都需要我們在pom文件中導入各種依賴,編寫web.xml、spring.xml、springmvc.xml配置文件等。

特別是需要導入大量的jar包依賴時,我們需要在網上查找各種jar包資源,各個jar間可能存在著各種依賴關係,這時候又得下載其依賴的jar包,有時候jar包間還存在著嚴格的版本要求,,所以當我們只是想開發一個Hello-World的超簡單的Web應用時,卻把極大部分的時間在花在了編寫配置文件和導入jar包依賴上,極大地影響了我們的開發效率。

所以為了簡化Spring繁雜的配置,Spring Boot應運而生。正如Spring Boot的名稱一樣,一鍵啟動,Spring Boot提供了自動配置功能,為我們提供了開箱即用的功能,使我們將重心放在業務邏輯的開發上。

那麼Spring Boot又是怎麼簡化Spring MVC的呢?Spring Boot和Spring、Spring MVC間又是怎樣的關係呢?Spring Boot又有什麼新特點呢?

接下來,讓我們走進Spring MVC 到Spring Boot的簡化之路,或許你就能找到這些答案。

Spring vs Spring MVC vs Spring Boot

Spring Boot和Spring、Spring MVC不是競爭關係,Spring Boot使我們更加容易使用Spring和Spring MVC

Spring FrameWork

Spring FrameWork解決的核心問題是什麼 Spring框架的最重要特性是依賴注入,所有的Spring模塊的核心都是依賴注入(DI)或控制反轉(IOC)。為什麼很重要呢,因為當我們使用DI或IOC時,我們可以使應用得到解耦。我們來看一個簡單的例子:

沒有依賴注入的例子:




使用依賴注入的例子:




Spring 還能解決什麼問題


1. 重複代碼

Spring框架停止了依賴注入(DI)嗎?沒有,它在依賴注入(DI)的核心概念上開發了許多Spring模塊:

Spring JDBCSpring MVCSpring AOPSpring ORMSpring Test...考慮一下Spring JDBC,這些模塊帶來了新功能嗎?並沒有,我們完全可以使用Java代碼完成這些工作。那麼,它們給我們帶來了什麼?它們帶來了簡單的抽象,這些簡單抽象的目的是:減少樣板代碼/減少重複促進解耦/增加單元可測性 例如:與傳統的JDBC相比,我們使用Spring JDBC需要編寫的代碼減少了許多。

2. 與其他框架良好的集成

Spring框架並不嘗試去解決已經解決了的問題,它所做的一切就是提供與提供出色解決方案的框架的完美集成。

HibernateIBatisJUnit...

Spring MVC

Spring MVC框架解決的核心問題是什麼 Spring MVC框架提供了開發Web應用的分離方式。通過DispatcherServlet、ModelAndView、View Resolver等簡單概念,是Web應用開發變得更加簡單。

為什麼需要Spring Boot

基於Spring的應用程序有很多配置。當我們使用Spring MVC時,我們需要配置組件掃描,調度器servlet,視圖解析器等:





Spring Boot解決的問題


1. Spring Boot 自動配置

Spring引入了新的思維過程:我們可以變得更加智能些嗎?當一個spring mvc jar包被添加到應用程序時,我們是否可以自動配置一些bean?

當Hibernate jar包在類路徑時,自動配置數據源怎樣?當Spring MVC jar包在類路徑時,自動配置Dispatcher Servlet怎樣?Spring Boot查看ClASSPATH上對於本應用程序需要編寫配置的框架,基於這些,Spring Boot提供了這些框架的基本配置-這就是自動配置。

2. Spring Boot Starter Projects

假設我們想開發一個Web應用程序。首先,我們需要確定我們想要使用的框架,使用哪個版本的框架以及如何將它們連接在一起。所有Web應用程序都有類似的需求 下面列出的是我們在Spring MVC中使用的一些依賴關係。這些包括Spring MVC,Jackson Databind(用於數據綁定),Hibernate-Validator(用於使用Java驗證API的服務器端驗證)和Log4j(用於日誌記錄)。在創建時,我們必須選擇所有這些框架的兼容版本:




什麼是Starter




我們來看Starter的一個示例 - Spring-Boot-Starter-Web




以下屏幕截圖顯示了添加到我們的應用程序中的不同依賴關係:



任何典型的Web應用程序都會使用所有這些依賴項.Spring Boot Starter Web預先打包了這些。作為開發人員,我們不需要擔心這些依賴關係或兼容版本。

3. Spring Boot Starter項目選項

正如Spring Boot Starter Web一樣,Starter項目幫助我們快速入門開發特定類型的應用程序:

spring-boot-starter-web-services - SOAP Web服務spring-boot-starter-web - Web和RESTful應用程序spring-boot-starter-test - 單元測試和集成測試spring-boot-starter-data-jpa - 帶有Hibernate的Spring Data JPAspring-boot-starter-cache - 啟用Spring Framework的緩存支持...


什麼是Spring Boot 自動配置

前面已經初步介紹過,在這裡詳細介紹一下。

當我們啟動Spring Boot應用程序時,我們可以在日誌中看到一些重要的消息。




上面的日誌語句顯示了Spring Boot Auto Configuration的行為。

一當我們在應用中添加了Spring Boot Starter Web依賴,Spring Boot AutoConfiguration就會發現Spring MVC在類路徑下,它會自動配置dispatcherServlet,一個默認的錯誤頁面和webjars。

如果你添加了Spring Boot DataJPA Starter依賴,Spring Boot AutoConfiguration會自動配置數據源(datasource)和實體管理器(Entity Manager)

Spring Boot Auto Configuration在哪裡實現

所有的自動配置邏輯都在spring-boot-autoconfigure.jar中實現。mvc、data和其他框架的所有自動配置邏輯都存在與一個jar包中。

spring-boot-autoconfigure.jar中重要的文件是/META-INF/spring.factories,該文件;列出了在EnableAutoConfiguration key下啟動的所有自動配置類。下面列出一些重要的配置類:




查看自動配置

打開調試日誌

在application.properties打開調試日誌:




當啟動程序時,會打印自動配置日誌信息

總結

Spring Boot的出現本身就是為了減低Web開發的門檻,使開發人員能夠專注於業務開發,而不需浪費時間在業務開發之外,至此Spring MVC到Spring Boot的簡化之路到此結束。

作者:Beyondlcg鏈接:https://juejin.im/post/5aa22d1f51882555677e2492