Spring Boot是什么我們知道察蹲,從 2002 年開始催训,Spring 一直在飛速的發(fā)展,如今已經(jīng)成為了在Java EE(Java Enterprise Edition)開發(fā)中真正意義上的標(biāo)準(zhǔn)漫拭,但是隨著技術(shù)的發(fā)展,Java EE使用 Spring 逐漸變得笨重起來混稽,大量的 XML 文件存在于項目之中采驻。繁瑣的配置,整合第三方框架的配置問題匈勋,導(dǎo)致了開發(fā)和部署效率的降低礼旅。
2012 年 10 月,Mike Youngstrom 在 Spring jira 中創(chuàng)建了一個功能請求洽洁,要求在 Spring 框架中支持無容器 Web 應(yīng)用程序體系結(jié)構(gòu)痘系。他談到了在主容器引導(dǎo) spring 容器內(nèi)配置 Web 容器服務(wù)。
這是 jira 請求的摘錄:我認為 Spring 的 Web 應(yīng)用體系結(jié)構(gòu)可以大大簡化饿自,如果它提供了從上到下利用 Spring 組件和配置模型的工具和參考體系結(jié)構(gòu)汰翠。在簡單的 main()方法引導(dǎo)的 Spring 容器內(nèi)嵌入和統(tǒng)一這些常用Web 容器服務(wù)的配置。 這一要求促使了 2013 年初開始的 Spring Boot 項目的研發(fā)昭雌,到今天奴璃,Spring Boot 的版本已經(jīng)到了 2.0.3 RELEASE。
Spring Boot 并不是用來替代 Spring 的解決方案城豁,而是和 Spring 框架緊密結(jié)合用于提升 Spring 開發(fā)者體驗的工具苟穆。同時它集成了大量常用的第三方庫配置,Spring Boot應(yīng)用中這些第三方庫幾乎可以是零配置的開箱即用(out-of-the-box)唱星,大部分的 Spring Boot 應(yīng)用都只需要非常少量的配置代碼(基于 Java 的配置)雳旅,開發(fā)者能夠更加專注于業(yè)務(wù)邏輯。
?為什么學(xué)習(xí)Spring Boot從Spring
官方來看我們打開 Spring 的官方網(wǎng)站间聊,可以看到:官方對 Spring Boot 的定位:Build Anything攒盈, Build任何東西。Spring Boot旨在盡可能快地啟動和運行哎榴,并且只需最少的 Spring 前期配置型豁。 同時我們也來看一下官方對后面兩個的定位: SpringCloud:Coordinate Anything,協(xié)調(diào)任何事情尚蝌; SpringCloud Data Flow:Connect everything迎变,連接任何東西。仔細品味一下飘言,Spring 官網(wǎng)對 Spring Boot衣形、SpringCloud 和 SpringCloud Data Flow三者定位的措辭非常有味道,同時也可以看出姿鸿,Spring 官方對這三個技術(shù)非常重視谆吴,是現(xiàn)在以及今后學(xué)習(xí)的重點(SpringCloud 相關(guān)達人課課程屆時也會上線)倒源。
從Spring Boot的優(yōu)點來看Spring Boot 有哪些優(yōu)點?主要給我們解決了哪些問題呢句狼?我們以下圖來說明:Spring Boot的優(yōu)點良好的基因Spring Boot 是伴隨著 Spring 4.0 誕生的笋熬,從字面理解,Boot是引導(dǎo)的意思腻菇,因此 Spring Boot 旨在幫助開發(fā)者快速搭建 Spring 框架突诬。Spring Boot 繼承了原有 Spring 框架的優(yōu)秀基因,使 Spring 在使用中更加方便快捷芜繁。Spring Boot與Spring簡化編碼舉個例子旺隙,比如我們要創(chuàng)建一個 web 項目骏令,使用 Spring 的朋友都知道,在使用 Spring 的時候周拐,需要在 pom 文件中添加多個依賴凰兑,而 Spring Boot 則會幫助開發(fā)著快速啟動一個 web 容器,在 Spring Boot 中勾给,我們只需要在 pom 文件中添加如下一個 starter-web 依賴即可播急。
學(xué)習(xí)群? 64弍46衣3凌9桩警,資料群 69似64陸0吧3
org.springframework.bootspring-boot-starter-web我們點擊進入該依賴后可以看到捶枢,Spring Boot 這個 starter-web 已經(jīng)包含了多個依賴飞崖,包括之前在 Spring 工程中需要導(dǎo)入的依賴,我們看一下其中的一部分长已,如下:org.springframeworkspring-eb5.0.7.RELEASEcompileorg.springframeworkspring-webmvc5.0.7.RELEASEcompile由此可以看出术瓮,Spring Boot 大大簡化了我們的編碼贰健,我們不用一個個導(dǎo)入依賴辜伟,直接一個依賴即可导狡。簡化配置Spring 雖然使Java EE輕量級框架旱捧,但由于其繁瑣的配置踩麦,一度被人認為是“配置地獄”。各種XML贫橙、Annotation配置會讓人眼花繚亂卢肃,而且配置多的話,如果出錯了也很難找出原因践剂。Spring Boot更多的是采用 Java Config 的方式逊脯,對 Spring 進行配置竣贪。
舉個例子:我新建一個類,但是我不用 @Service注解演怎,也就是說甘桑,它是個普通的類,那么我們?nèi)绾问顾渤蔀橐粋€ Bean 讓 Spring 去管理呢?只需要@Configuration 和@Bean兩個注解即可德谅,如下:
public class TestService
{ public String sayHello ()
{ return "Hello Spring Boot!"; }}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configurationpublic class JavaConfig {
?? @Bean public TestService getTestService()
?{ return new TestService(); }}
@Configuration表示該類是個配置類窄做,@Bean表示該方法返回一個 Bean组砚。這樣就把TestService作為 Bean 讓 Spring 去管理了掏颊,在其他地方蚯舱,我們?nèi)绻枰褂迷?Bean,和原來一樣陈肛,直接使用@Resource注解注入進來即可使用句旱,非常方便谈撒。@Resourceprivate TestService testService;另外匾南,部署配置方面蛆楞,原來 Spring 有多個 xml 和 properties配置豹爹,在 Spring Boot 中只需要個 application.yml即可。
簡化部署在使用 Spring 時光稼,項目部署時需要我們在服務(wù)器上部署 tomcat艾君,然后把項目打成 war 包扔到 tomcat里,在使用 Spring Boot 后吁恍,我們不需要在服務(wù)器上去部署 tomcat播演,因為 Spring Boot 內(nèi)嵌了 tomcat,我們只需要將項目打成 jar 包拾徙,使用 java -jar xxx.jar一鍵式啟動項目。另外,也降低對運行環(huán)境的基本要求崖瞭,環(huán)境變量中有JDK即可书聚。簡化監(jiān)控我們可以引入 spring-boot-start-actuator 依賴雌续,直接使用 REST 方式來獲取進程的運行期性能參數(shù),從而達到監(jiān)控的目的驯杜,比較方便滚局。
但是 Spring Boot 只是個微框架再悼,沒有提供相應(yīng)的服務(wù)發(fā)現(xiàn)與注冊的配套功能冲九,沒有外圍監(jiān)控集成方案跟束,沒有外圍安全管理方案,所以在微服務(wù)架構(gòu)中略贮,還需要 Spring Cloud 來配合一起使用逃延。從未來發(fā)展的趨勢來看微服務(wù)是未來發(fā)展的趨勢轧拄,項目會從傳統(tǒng)架構(gòu)慢慢轉(zhuǎn)向微服務(wù)架構(gòu),因為微服務(wù)可以使不同的團隊專注于更小范圍的工作職責(zé)、使用獨立的技術(shù)俐末、更安全更頻繁地部署卓箫。而 繼承了 Spring 的優(yōu)良特性丽柿,與 Spring 一脈相承甫题,而且 支持各種REST API 的實現(xiàn)方式坠非。Spring Boot 也是官方大力推薦的技術(shù)炎码,可以看出攒菠,Spring Boot 是未來發(fā)展的一個大趨勢