- Spring Boot進階:原理、實戰與面試題分析
- 鄭天民
- 2008字
- 2022-07-05 09:41:37
1.2.2 Spring Boot應用程序結構和示例
針對一個基于Spring Boot開發的Web應用程序,其代碼組織方式需要遵循一定的項目結構。在本小節中,我們將給出這一項目結構,并提供一個可以直接運行的Spring Boot Web應用程序示例。
1. Spring Boot應用程序結構
在本書中,如果不特殊說明,我們都將使用Maven來管理代碼工程的結構和包依賴。一個典型的Web應用程序的項目結構如下所示:
demo-service
src/main/java
com.spring.demo
DemoApplication.java →啟動類
com.spring.demo.controller →控制器組件
com.spring.demo.repository →數據訪問層組件
com.spring.demo.service →業務邏輯層組件
com.spring.demo.domain →領域實體
src/main/resources
application.yml →配置文件
pom.xml →包依賴
這里有幾個方面需要特別注意,分別是包依賴、啟動類、控制器組件以及配置文件,下面分別展開介紹。
(1)包依賴
Spring Boot提供了一系列starter工程來簡化各種組件之間的依賴關系。以開發Web服務為例,需要引入spring-boot-starter-web這個工程。在應用程序中引入spring-boot-starter-web組件就像引入一個普通的Maven依賴一樣,如代碼清單1-1所示。
代碼清單1-1 將spring-boot-starter-web依賴包引入代碼
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
一旦spring-boot-starter-web組件引入完畢,我們就可以充分利用Spring Boot提供的自動配置機制開發Web應用程序。請注意,spring-boot-starter-web包的命名上有個特殊的地方,即使用了-starter,這是Spring Boot所特有的starter機制的標識。Spring Boot中的starter是一種非常重要的機制,可以將以前繁雜的配置統一集成進starter,開發人員只需要在Maven中引入starter依賴,Spring Boot就能自動掃描要加載的信息并啟動相應的默認配置。我們在本書第13章中會對Spring Boot Starter展開詳細的介紹。
我們來看一下spring-boot-starter-web工程的組成部分,可以看到這個工程中并沒有具體的代碼,只是包含了一些pom依賴,如下所示:
org.springframework.boot:spring-boot-starter
org.springframework.boot:spring-boot-starter-tomcat
org.springframework.boot:spring-boot-starter-validation
com.fasterxml.jackson.core:jackson-databind
org.springframework:spring-web
org.springframework:spring-webmvc
可以看到這里包括了傳統Spring WebMVC應用程序中會用到的spring-web和spring-webmvc組件,因此Spring Boot在底層實現上還是基于這兩個組件完成了對Web請求的響應流程的構建。
本書將采用最新的Spring Boot 2.5.3版本,我們發現它所依賴的Spring組件都升級到了5.3.9版本,如圖1-5所示。

圖1-5 Spring Boot 2.5.3版本的依賴包示意圖
(2)啟動類
使用Spring Boot最重要的一個步驟是創建一個Bootstrap啟動類。Bootstrap類結構簡單且比較固化,如代碼清單1-2所示。
代碼清單1-2 Spring Boot Bootstrap類示例代碼
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
顯然,這里引入了一個全新的注解@SpringBootApplication。在Spring Boot中,添加了該注解的類就是整個應用程序的入口,一方面會啟動整個Spring容器,另一方面會自動掃描代碼包結構下的@Component、@Service、@Repository、@Controller等注解,把這些注解對應的類轉化為Bean對象并全部加載到Spring容器中。
(3)控制器組件
Bootstrap類為我們提供了Spring Boot應用程序的入口,相當于應用程序已經有了最基本的骨架。接下來我們就可以添加針對HTTP請求的訪問入口,表現在Spring Boot中也就是添加一系列的Controller類。這里的Controller與Spring WebMVC中的Controller在概念上是一致的,一個典型的Controller類如代碼清單1-3所示。
代碼清單1-3 Controller類示例代碼
@RestController @RequestMapping(value="users") public class UserController { @GetMapping(value = "/{id}") public User getUserById(@PathVariable Long id) { User user = new User(); user.setId(id); user.setName("Tianyalan"); user.setPassword("123456"); return user; } }
請注意,這里為了演示方便,使用硬編碼完成了一個HTTP GET請求的響應處理。上述代碼中包含了@RestController、@RequestMapping和@GetMapping這三個注解。其中,@RequestMapping注解用于指定請求地址的映射關系,@GetMapping注解的作用等同于指定了GET請求的@RequestMapping注解。而@RestController注解是傳統Spring MVC中所提供的@Controller注解的升級版,相當于@Controller和@ResponseEntity注解的結合體,會自動使用JSON實現序列化/反序列化操作。
(4)配置文件
最后,我們看一下配置文件。請注意配置文件可以是空的,開發人員如果不需要特別指定服務器端口的信息,那么完全可以基于Spring Boot內置的默認配置來運行Web應用程序。默認情況下,Spring Boot會使用8080作為監聽HTTP請求的服務端口。
Spring Boot中的配置體系非常有特色,充分采用了“約定優于配置”(Convention Over Configuration)這一設計理念。作為專題,我們將在1.2.3節中具體講解該內容。
2. Spring Boot應用程序示例
基于Spring Boot創建Web應用程序的方法有很多,其中最簡單、最直接的方法就是使用Spring官方提供的Spring Initializr模板。直接訪問Spring Initializr網站(http://start.spring.io/),選擇創建一個Maven項目并指定相應的Group和Artifact,然后在添加的依賴中選擇Spring Web,點擊GENERATE按鈕即可。界面效果如圖1-6所示。

圖1-6 使用Spring Initializr創建Web應用程序示意圖
當然,對于有一定開發經驗的人員而言,完全可以基于Maven本身的功能特性和結構來生成圖1-6中的代碼工程。
接下來,讓我們來為這個代碼工程添加一些RESTful風格的HTTP端點。這里,直接使用前面已經構建完成的UserController。
現在RESTful端點已經開發完成,我們需要對這個應用程序進行打包。基于Spring Boot和Maven,當我們使用mvn package命令構建整個應用程序時,將得到一個userservice-0.0.1-SNAPSHOT.jar文件。而這個JAR文件就是可以直接運行的可執行文件,內置了Tomcat Web服務器。也就是說,我們可以通過如代碼清單1-4所示的命令直接運行這個Spring Boot應用程序。
代碼清單1-4 Spring Boot應用程序啟動命令
java -jar userservice-0.0.1-SNAPSHOT.jar
那么,如何驗證服務是否啟動成功,以及HTTP請求是否得到正確響應呢?在本書中,我們將引入Postman來演示如何通過HTTP暴露的端點進行遠程服務訪問。Postman提供了強大的Web API和HTTP請求調試功能,界面簡潔明晰,操作也比較方便快捷和人性化。Postman能夠發送任何類型的HTTP請求(如GET、HEAD、POST、PUT等),并能附帶任何數量的參數和HTTP請求頭(Header)。
通過Postman訪問http://localhost:8080/users/1端點,我們可以得到如圖1-7所示的HTTP響應結果,說明整個服務已經啟動成功。

圖1-7 通過Postman訪問HTTP端點效果示意圖
現在我們已經明白如何構建、打包以及運行一個簡單的Web應用程序。這是一切開發工作的起點,后續所有的案例代碼都將通過這種方式展現在你面前,包括接下來要介紹的Spring Boot配置體系。
- SQL Server 從入門到項目實踐(超值版)
- Learn Blockchain Programming with JavaScript
- Node.js+Webpack開發實戰
- Go語言高效編程:原理、可觀測性與優化
- R語言數據可視化之美:專業圖表繪制指南
- JIRA 7 Administration Cookbook(Second Edition)
- Offer來了:Java面試核心知識點精講(原理篇)
- Mastering QGIS
- Oracle 12c中文版數據庫管理、應用與開發實踐教程 (清華電腦學堂)
- SEO實戰密碼
- Python爬蟲、數據分析與可視化:工具詳解與案例實戰
- Mastering Elasticsearch(Second Edition)
- JavaScript程序設計:基礎·PHP·XML
- Visual FoxPro 6.0程序設計
- Natural Language Processing with Python Quick Start Guide