Java開發分爲兩個陣營,一個是由Oracle 爲表明的Java EE陣營,這是Web開發的官方參考標準。其中核心技術主要有Servlet, EJB, JMS, JSF, JDBC/JPA, JAXB, JAX-WS等。另外一個陣營則是由開源社區以及Pivotal表明的Spring陣營,其中核心技術主要有 Spring Framework, Spring MVC, Spring Data, Spring Security等等。java
Spring從最開始做爲依賴注入的Bean container,逐漸發展爲Java應用開發的主流框架。Java EE由於其臃腫,複雜,難以使用的結構,被不少Java程序員拋棄。從Java EE6開始才引入了CDI (Context Dependency Injection),並且Java EE 的設計思想很是學術化, Gavin King等人脫離了工業界的需求,使得Java EE開發很是複雜。JSF甚至爲Java之父James Gosling詬病。相反在Spring社區,愈來愈多現代化的應用開發方法被融入進來,造成不一樣的Spring項目。程序員
什麼是Spring Boot?flask
Spring Boot即是一個社區反饋推進的項目. Spring Boot能夠說是至少近5年來Spring乃至整個Java社區最有影響力的項目之一。Spring Boot主要包含如下特性:服務器
-
直接嵌入Tomcat, Jetty或者Undertow做爲Servlet container。今後以後不再用將應用程序打包成war而後上傳到application server裏面了。app
-
提供了starter POM, 可以很是方便的進行包管理, 很大程度上減小了jar hell或者dependency hell框架
-
自動進行Spring框架的配置,節省程序員大量的時間和精力,可以讓程序員專一在業務邏輯代碼的編寫上ide
-
不須要任何第三方系統, Spring Boot自帶了能夠用於生產環境的程序狀態信息和健康狀態。同時可讓應用程序很是方便的讀取外部的配置信息函數
-
徹底不須要任何代碼的自動生成。更不須要用xml來進行框架的配置工具
爲何Spring Boot是顛覆性的?spa
爲何說Spring Boot是顛覆性的呢?由於它完全改變了Java應用開發的模式。以往咱們作Spring應用開發,要知道配置哪些類來讓Hibernate和Spring一塊兒工做,要知道如何配置view resolver來控制哪一個模版進行視圖層的展現。常常寫了一大堆代碼以後發現只是在處理Spring框架自己的配置,根本一行業務邏輯都沒有寫。開發完成以後,咱們還要考慮部署的問題,且不說部署到很是笨重的應用服務器,好比WebSphere, Weblogic或者JBoss,即便部署到Tomcat或者Jetty這種輕量級容器上面,咱們要知道如何配置容器,如何修改配置文件等等。並且在多應用部署到同一個Tomcat的時候,常常會出現衝突。就算咱們花了很大力氣解決了這些問題,程序部署成功以後,咱們很難去了解這個程序的運行狀態。有可能咱們要配置不少第三方工具來去知道這個應用程序運行狀態如何,有哪些參數,環境變量是什麼。儘管Spring幫咱們解決了依賴注入的問題,簡化了一些MVC的流程,可是Spring框架自己集成了愈來愈多東西,致使其愈來愈難配置,維護成本成直線上升。不少時候Java程序員們看到Python, Ruby或者JavaScript程序員敲幾個命令安裝一些庫,而後簡單的敲幾行代碼,引入一些框架好比flask,而後直接一個簡單的API就能夠跑起來了。這時候Java程序員可能還在研究該使用Maven裏面的哪一個庫,如何在代碼裏面進行配置呢。
傳統Spring開發對決Spring Boot應用開發
接下來我會經過具體例子對比傳統的Spring應用開發和Spring Boot應用開發。假如咱們開發一個Hello World的REST API,傳統的Spring開發應該這麼作.
1. 若是使用Maven進行包管理,編寫pom.xml 以下
如上能夠看到爲了編寫簡單的hello world REST API咱們引入了Spring Core, Spring Web, Spring Web MVC, Java Servlet and Jackson這麼多包依賴。能夠想象複雜一點的程序這個pom會變成什麼樣。。。
2. 編寫HelloWorldInitializer class以下
這個已是很是簡單的Java Config了,在Servlet 3.0以前用XML配置Spring的小夥伴們如今估計已經崩潰。
3. 編寫HelloWorldConfiguration class
注意到咱們這個類裏面一行業務邏輯都沒有哦。。。
4. 真正開始編寫HelloWorldRestController
5. 下載Tomcat
6. 打包部署到Tomcat上
7.訪問localhost:8080/HelloWorld, 你終於看到了Hello World…
寫到這裏我已經累覺不愛了。。。
接下來Java老司機會帶領大家感覺一下Spring Boot的魅力:
1. 編寫pom.xml
注意到咱們只引入了一個包依賴,而且版本什麼的就隨他去吧
2. 編寫main 函數
咱們在這裏標記HelloWorldDemoApplication class爲SpringBootApplication, Spring Boot 在後臺會根據這個標記進行不少自動配置,好比配置MVC,配置包掃描,注入必要的類,注入自動配置的類等等。
這裏的main函數是一個java標準的main函數,這個至關於應用程序入口,servlet container會在啓動的時候找到這個入口,啓動Spring container,完成初始化。
3. 編寫HelloWorldRestController
4. 直接啓動應用程序,不須要部署
5. 訪問 http:// localhost:8080 就能夠直接看到Hello World了
以前HelloWorld程序對於新手來講至少要花個10-20分鐘之類的,有了SpringBoot, 最多3分鐘以內搞定HelloWorld不是夢。
總結
這裏我只是簡單的對SpringBoot進行了講解,SpringBoot有很是多值得深刻討論的東西,它不只讓咱們作Java開發變的簡單有效,更重要的是SpringBoot完全顛覆了咱們對Java開發的認識,讓咱們第一次有了」原來Java開發能夠這麼作」 的感受。有了SpringBoot以後,Java程序員能夠更專一於業務邏輯,進行更敏捷的開發。