用Spring Boot顛覆Java應用開發

穿格子衣上班發表於2019-04-26

Java開發概述:

使用Java做Web應用開發已經有近20年的歷史了,從最初的Servlet1.0一步步演化到現在如此多的框架,庫以及整個生態系統。經過這麼長時間的發展,Java作為一個成熟的語言,也演化出了非常成熟的生態系統,這也是許多公司採用Java作為主流的語言進行伺服器端開發的原因,也是為什麼Java一直保持著非常活躍的使用者群。然而這個生態系統紛繁複雜,一個非常簡單的Java Web應用程式都有可能應用到以下技術:

用Spring Boot顛覆Java應用開發

Java開發分為兩個陣營,一個是由Oracle 為代表的Java EE陣營,這是Web開發的官方參考標準。其中核心技術主要有Servlet, EJB, JMS, JSF, JDBC/JPA, JAXB, JAX-WS等。另一個陣營則是由開源社群以及Pivotal代表的Spring陣營,其中核心技術主要有 Spring Framework, Spring MVC, Spring Data, Spring Security等等。

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?

Spring Boot便是一個社群反饋推動的專案. Spring Boot可以說是至少近5年來Spring乃至整個Java社群最有影響力的專案之一。Spring Boot主要包含以下特性:

直接嵌入Tomcat, Jetty或者Undertow作為Servlet container。從此之後再也不用將應用程式打包成war然後上傳到application server裡面了。

提供了starter POM, 能夠非常方便的進行包管理, 很大程度上減少了jar hell或者dependency hell

自動進行Spring框架的配置,節省程式設計師大量的時間和精力,能夠讓程式設計師專注在業務邏輯程式碼的編寫上

不需要任何第三方系統, Spring Boot自帶了可以用於生產環境的程式狀態資訊和健康狀態。同時可以讓應用程式非常方便的讀取外部的配置資訊

完全不需要任何程式碼的自動生成。更不需要用xml來進行框架的配置

為什麼Spring Boot是顛覆性的?

為什麼說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 如下

用Spring Boot顛覆Java應用開發

用Spring Boot顛覆Java應用開發
如上可以看到為了編寫簡單的hello world REST API我們引入了Spring Core, Spring Web, Spring Web MVC, Java Servlet and Jackson這麼多包依賴。可以想象複雜一點的程式這個pom會變成什麼樣。。。

2. 編寫HelloWorldInitializer class如下

用Spring Boot顛覆Java應用開發
這個已經是非常簡單的Java Config了,在Servlet 3.0之前用XML配置Spring的小夥伴們現在估計已經崩潰。

3. 編寫HelloWorldConfiguration class

用Spring Boot顛覆Java應用開發
注意到我們這個類裡面一行業務邏輯都沒有哦。。。

4. 真正開始編寫HelloWorldRestController

用Spring Boot顛覆Java應用開發

5. 下載Tomcat

6. 打包部署到Tomcat上

7.訪問localhost:8080/HelloWorld, 你終於看到了Hello World…

接下來Java老司機會帶領你們感受一下Spring Boot的魅力:

1. 編寫pom.xml

用Spring Boot顛覆Java應用開發

用Spring Boot顛覆Java應用開發
注意到我們只引入了一個包依賴,並且版本什麼的就隨他去吧

2. 編寫main 函式

用Spring Boot顛覆Java應用開發

我們在這裡標記HelloWorldDemoApplication class為SpringBootApplication, Spring Boot 在後臺會根據這個標記進行很多自動配置,比如配置MVC,配置包掃描,注入必要的類,注入自動配置的類等等。

這裡的main函式是一個java標準的main函式,這個相當於應用程式入口,servlet container會在啟動的時候找到這個入口,啟動Spring container,完成初始化。

3. 編寫HelloWorldRestController

用Spring Boot顛覆Java應用開發

4. 直接啟動應用程式,不需要部署

用Spring Boot顛覆Java應用開發

5. 訪問http://localhost:8080 就可以直接看到Hello World了

用Spring Boot顛覆Java應用開發
之前HelloWorld程式對於新手來說至少要花個10-20分鐘之類的,有了SpringBoot, 最多3分鐘之內搞定HelloWorld不是夢。

總結

這裡我只是簡單的對SpringBoot進行了講解,SpringBoot有非常多值得深入討論的東西,它不僅讓我們做Java開發變的簡單有效,更重要的是SpringBoot徹底顛覆了我們對Java開發的認識,讓我們第一次有了”原來Java開發可以這麼做” 的感覺。有了SpringBoot之後,Java程式設計師可以更專注於業務邏輯,進行更敏捷的開發。

相關文章