從Servlet技術到Spring和Spring MVC,開發Web應用變得愈來愈簡捷。可是Spring和Spring MVC的衆多配置有時卻讓人望而卻步,相信有過Spring MVC開發經驗的朋友能深入體會到這一痛苦。由於即便是開發一個Hello-World的Web應用,都須要咱們在pom文件中導入各類依賴,編寫web.xml、spring.xml、springmvc.xml配置文件等。web
特別是須要導入大量的jar包依賴時,咱們須要在網上查找各類jar包資源,各個jar間可能存在着各類依賴關係,這時候又得下載其依賴的jar包,有時候jar包間還存在着嚴格的版本要求,,因此當咱們只是想開發一個Hello-World的超簡單的Web應用時,卻把極大部分的時間在花在了編寫配置文件和導入jar包依賴上,極大地影響了咱們的開發效率。spring
因此爲了簡化Spring繁雜的配置,Spring Boot應運而生。正如Spring Boot的名稱同樣,一鍵啓動,Spring Boot提供了自動配置功能,爲咱們提供了開箱即用的功能,使咱們將重心放在業務邏輯的開發上。sql
那麼Spring Boot又是怎麼簡化Spring MVC的呢?Spring Boot和Spring、Spring MVC間又是怎樣的關係呢?Spring Boot又有什麼新特色呢?緩存
接下來,讓咱們走進Spring MVC 到Spring Boot的簡化之路,或許你就能找到這些答案。服務器
Spring Boot和Spring、Spring MVC不是競爭關係,Spring Boot使咱們更加容易使用Spring和Spring MVC架構
Spring FrameWork解決的核心問題是什麼 Spring框架的最重要特性是依賴注入,全部的Spring模塊的核心都是依賴注入(DI)或控制反轉(IOC)。爲何很重要呢,由於當咱們使用DI或IOC時,咱們可使應用獲得解耦。咱們來看一個簡單的例子:併發
沒有依賴注入的例子:mvc
使用依賴注入的例子:app
1. 重複代碼框架
Spring框架中止了依賴注入(DI)嗎?沒有,它在依賴注入(DI)的核心概念上開發了許多Spring模塊:
Spring JDBC
Spring MVC
Spring AOP
Spring ORM
Spring Test
...
考慮一下Spring JDBC,這些模塊帶來了新功能嗎?並無,咱們徹底可使用Java代碼完成這些工做。那麼,它們給咱們帶來了什麼?它們帶來了簡單的抽象,這些簡單抽象的目的是:
減小樣板代碼/減小重複
促進解耦/增長單元可測性 例如:與傳統的JDBC相比,咱們使用Spring JDBC須要編寫的代碼減小了許多。
2. 與其餘框架良好的集成
Spring框架並不嘗試去解決已經解決了的問題,它所作的一切就是提供與提供出色解決方案的框架的完美集成。
Hibernate
IBatis
JUnit
...
Spring MVC框架解決的核心問題是什麼 Spring MVC框架提供了開發Web應用的分離方式。經過DispatcherServlet、ModelAndView、View Resolver等簡單概念,是Web應用開發變得更加簡單。
基於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 JPA
spring-boot-starter-cache - 啓用Spring Framework的緩存支持
...
前面已經初步介紹過,在這裏詳細介紹一下。
當咱們啓動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-autoconfigure.jar中實現。mvc、data和其餘框架的全部自動配置邏輯都存在與一個jar包中。
spring-boot-autoconfigure.jar中重要的文件是/META-INF/spring.factories,該文件;列出了在EnableAutoConfiguration key下啓動的全部自動配置類。下面列出一些重要的配置類:
打開調試日誌
在application.properties打開調試日誌:
當啓動程序時,會打印自動配置日誌信息
Spring Boot的出現自己就是爲了減低Web開發的門檻,使開發人員可以專一於業務開發,而不需浪費時間在業務開發以外,至此Spring MVC到Spring Boot的簡化之路到此結束。
歡迎工做一到五年的Java工程師朋友們加入Java架構開發: 855835163 羣內提供免費的Java架構學習資料(裏面有高可用、高併發、高性能及分佈式、Jvm性能調優、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用本身每一分每一秒的時間來學習提高本身,不要再用"沒有時間「來掩飾本身思想上的懶惰!趁年輕,使勁拼,給將來的本身一個交代!