Java仍在榜首!TIOBE 1月程式語言排行榜已揭曉

異步社區 發佈 2020-01-16T03:02:44+00:00

因為還沒有寫Controller,還不能通過瀏覽器訪問應用,因此再創建一個類,類名叫HelloworldController,包名是com.ibeetl.springboot.ch1.controller,代碼如下:package com.bee.sample.ch1.contr

最近,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,你了解多少呢?」


關鍵字: