最近,TIOBE 公布了2019年度程式語言,C語言以2.44%的增長率一舉成為2019年度程式語言。
但TIOBE最新發布的1月程式語言排行榜,結果不出意外,Java仍然位居榜首。出生已經20多年的Java,其具有卓越的通用性、高效性、平台移植性和安全性,至今仍擁有全球最大的開發者專業社群,並被廣泛地應用在PC、移動網際網路等多個領域。
據TIOBE的數據顯示,Java比其他語言更常名列榜首。畢竟,Java仍然是使用最廣泛的程式語言,也是全球第五大最受歡迎的開發技術。
而按照 Spring 官方最新的說法,Spring 是現代 Java 的起源。
環顧當前Java開源世界中的流行技術框架,能同時滿足快速開發和分布式系統架構的框架,當屬群眾基礎最好,功能最全,基於Spring技術的Spring Boot框架。
這幾年來,企業應用的開發框架都漸漸使用Spring Boot 2作為基礎,以我的開發經歷來看,在寫作本書第一版的時候,公司一開始是拒絕使用Spring Boot 的,而堅持使用Spring,後來也是在調研後同意採用Spring Boot並取得了很好效果。
如果你搜索關於Spring 的開發「腳手架」,你會發現這些「腳手架」已經轉為以SpringBoot 2為基礎的開發框架。網際網路公司也開始大量採用Spring Boot,一些巨無霸網際網路公司雖然由於歷史原因沒有採用Spring Boot和Spring Cloud,但這些公司的框架和微服務設計,跟Spring Boot和Spring Cloud相差無幾。
開發腳手架是指一套現成的系統,它包含了技術框架(如使用Spring Boot),和基礎的業務領域的功能,以及業務開發規範。開發腳手架通常包含最基礎的用戶、機構、權限、數據字典管理,也可能包含代碼生成功能,基礎的工作流集成等。本書附錄會介紹SpringBoot-Plus開發腳手架,一個適合中小型企業應用的腳手架。
而開發框架是一套技術框架,如Spring Boot 2,基於Spring的SpringSide,Struts等的技術框架。
但是使用Spring框架常常會有被開發者詬病的一點:使用了太多的XML。 作為Spring框架的擴展,Boot不僅可以消除掉設置Spring應用程式所需的XML配置,Spring Boot還具有以下特點:
1:創建獨立的spring應用。
2:嵌入Tomcat, Jetty Undertow 而且不需要部署。
3:提供的「starters」 poms來簡化Maven配置。
4:儘可能自動配置spring應用。
5:提供生產指標,健壯檢查和外部化配置。
6:絕對沒有代碼生成和XML配置要求。
這些特點為更快、更高效的開發生態系統鋪平了道路。對使用Spring的開發者來說,不管是為了提高效率還是為了避免XML配置,Spring Boot都是應該掌握的技術。
我們就先從Spring Boot的一個入門級WEB應用開始講起。
1. Hello,Spring Boot
完成一個簡單的Web應用,輸出Hello、SpringBoot。基於已經安裝好的環境,只需要JDK8、Eclipse、Maven3就可以了。
創建一個Maven工程
打開Idea,選擇File|New| Project,在彈的出面板里,選擇Maven。
下一個面板里,需要輸入group Id和Artifact Id,前者輸入com.ibeetl.springboot,後者輸入ch01,然後單擊完成按鈕,如圖所示。
我們將從一個空白的maven工程來創建spring應用。下一個面板里,需要輸入group Id和Artifact Id,前者輸入com.ibeetl.springboot,後者輸入ch01,然後點擊完成,如圖所示。
這時候我們就能看到一個Maven 工程出現在Idea里,如圖所示。
打開pom文件,會看到Idea已經為我們創建了一個maven工程的基本信息,接下來,我們需要在pom文件里增加把普通Java項目改成Spring Boot的項目。
增加Web支持
本章是一個簡單的web應用,不用像以往的各種Web框架那樣先下載安裝一個web伺服器,然後創建web工程,配置web.xml、 applicationContext.xml。在Spring Boot,僅僅需要在pom文件里申明使用Spring Boot,並添加一個spring-boot-starter-web 的依賴即可。Spring Boot會內置使用tomcat作為web server,並且自動配置好spring應用所需要的一切配置。
打開pom.xm 添加如下內容,使我們工程變成Spring Boot應用:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.5.RELEASE</version></parent>
因為我們是搭建web應用,必須添加spring-boot-starter-web 依賴,因此,增加如下內容:
@SpringBootApplication publicclass Ch1Application { }
spring-boot-starter-web 默認會使用內置的Tomcat,並支持SpringMVC,RESTful服務。做好上面的配置後,整個maven文件看起來是這個樣子:
publicstaticvoidmain(String[] args){ SpringApplication.run(Ch1Application.class, args); }
注意:使用Maven的唯一問題在於有可能maven自動下載依賴包太慢,唯一需要做的是耐心等待,或者修改Maven的鏡像,改為國內鏡像。關於使用Maven正確方法,請參考本書2.3節。
hello world
準備好pom後,在工程里創建一個有main方法類,包名是com.ibeetl.springboot.ch1,類名是Ch1Application,比如:
package com.ibeetl.springboot.ch1; publicclass Ch1Application { }
這只是一個Java普通的類,我們現在需要使其成為一個Spring Boot 應用,首先在Ch1Application類上添加註解:
@SpringBootApplication publicclass Ch1Application { }
然後面添加一個main方法:
publicstaticvoidmain(String[] args){ SpringApplication.run(Ch1Application.class, args); }
整個代碼如下:
package com.ibeetl.springboot.ch1; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication publicclass Ch1Application { publicstaticvoidmain(String[] args){ SpringApplication.run(Ch1Application.class, args); } }
@SpringBootApplication 註解是關鍵,標誌了這個應用是Spring Boot應用,可以運行。因為還沒有寫Controller,還不能通過瀏覽器訪問應用,因此再創建一個類,類名叫HelloworldController,包名是com.ibeetl.springboot.ch1.controller,代碼如下:
package com.bee.sample.ch1.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;@Controllerpublic class HelloworldController { @RequestMapping("/say.html") @ResponseBody public String say(){ return "hello world"; }}
注意:Spring boot應用,建議啟動程序的包名,也就是本例子的Ch1Application層次最高,其他類均在其下,這樣Spring Boot默認自動搜索啟動程序之下的所有類,否則,啟動類需要使用@ComponentScan 來指定Spring容器需要關注的類,關於@ComponentScan,我們將在Spring Boot 高級特性那章介紹到。
@Controller 是Spring MVC註解,表示此類用於負責處理web請求。
@RequestMapping 與 @Controller搭檔,表示如果請求路徑匹配,被註解的方法將會被調用。
@ResponseBody 表示此方法返回的文本而不是視圖名稱。
編寫完這個類,重新啟動Ch1Application程序,這個時候,我們會看到啟動日誌里有如下行:
@PostMapping("/order") public String addOrder(@RequestBody Order order) throws Exception{ return "{success:true,message:\"添加成功\"}"; }
打開瀏覽器,訪問地址http://127.0.0.1:8080/say.html,可以看到輸出了hello world。
接著介紹下如何通過SpringBoot來實現RESTful,介紹Swager工具如何來增強RESTfull的維護與開發。
2. SpringBoot Rest集成
集成REST
只要Spring-boot-starter-web 依賴在pom里,即自動支持REST
@PostMapping("/order") public String addOrder(@RequestBody Order order) throws Exception{ return "{success:true,message:\"添加成功\"}"; }
@RestController
註解@RestController 用於描述REST服務,他相當於@Controller 和@ResponseBody的組合,下面兩個例子是等價的。
@RestController @RequestMapping("/api/v1") public class OrderApiCrontroller { @GetMapping("/order/{orderId}") public Order getOrder(@PathVariable String orderId) throws Exception{ ..... } } @Controller @RequestMapping("/api/v1") public class OrderApiCrontroller { @GetMapping("/order/{orderId}") public @ResponseBody Order getOrder(@PathVariable String orderId) throws Exception{ ..... } }
記住,REST架構只是一種架構風格而不是一種特殊的技術,即使沒有使用@RestController註解,你也能完成REST架構。
為了測試REST服務,我們可以使用curl命令。如果你是linux或者Mac系統,他們自帶curl命令。如果你是window系統,如果安裝了git,也會自帶curl命令,否則就得先自行安裝curl命令,詳情參考第3章關於curl的介紹部分。
對於如下REST接口:
@PostMapping("/order") public String addOrder(@RequestBody Order order) throws Exception{ return "{success:true,message:\"添加成功\"}"; }
可以使用如下命令進行測試:
>curl -XPOST '127.0.0.1:8080/api/v1/order' -H 'Content-Type: application/json' -d' { "id" : "001", "name":"訂單" } '
刪除接口:
@DeleteMapping("/order/{orderId}") public String cancelOrder(@PathVariable String orderId) throws Exception{ return "{success:true,message:\"訂單取消成功\"}"; }
可以使用如下命令進行測試:
>curl -XDELETE '127.0.0.1:8080/api/v1/order/100'
以上內容均來自於《Spring Boot 2權威實戰指南》。
異步經典專欄
■《Spring Boot 2實戰權威指南——基礎篇》
本專欄是Spring Boot 2權威實戰指南基礎篇,內容緊密結合實戰,同時提供一個適合中等複雜企業系統的開源開發平台plus系統供學習。本專欄杜絕純理論,杜絕貼源碼行為,杜絕只講Spring Boot,能讓讀者立刻學習,立刻使用,提供了較為全面的基礎知識,可以作為參考資料供開發使用。
■《Spring Boot 2實戰權威指南——分布式篇》
本專欄是Spring Boot 2權威實戰指南分布式篇。涉及分布式常用的技術:REST,MongDB,Redis,Elastic Search,分布式緩存,Spring Session,還有分布式中非常重要的分布協調技術Zookeeper,能使讀者快速從單體應用提升到分布式應用。區別於Spring Cloud,本專欄介紹的知識是構建大型分布式系統必備技術。
今日福利
《Spring Boot 2實戰權威指南——基礎篇》
作者: 李家智
如何獲得:訪問【異步圖書】微信公眾號,在同名文章中在看+參與話題留言+轉發本文至朋友圈,1月30日,異步君將抽取2名讀者贈送《Spring Boot 2實戰權威指南——基礎篇》。
今日互動話題:
「關於Spring,你了解多少呢?」