官术网_书友最值得收藏!

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所示。

020-1

圖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所示。

022-1

圖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響應結果,說明整個服務已經啟動成功。

023-1

圖1-7 通過Postman訪問HTTP端點效果示意圖

現在我們已經明白如何構建、打包以及運行一個簡單的Web應用程序。這是一切開發工作的起點,后續所有的案例代碼都將通過這種方式展現在你面前,包括接下來要介紹的Spring Boot配置體系。

主站蜘蛛池模板: 昌乐县| 西乌珠穆沁旗| 图木舒克市| 江孜县| 龙陵县| 突泉县| 贵南县| 泸水县| 隆昌县| 德令哈市| 祥云县| 秭归县| 黄陵县| 田东县| 连平县| 通江县| 霍林郭勒市| 泰顺县| 通山县| 汤原县| 册亨县| 昭苏县| 青浦区| 神农架林区| 耒阳市| 苍山县| 东丰县| 离岛区| 攀枝花市| 和田市| 专栏| 油尖旺区| 贺州市| 安图县| 吉木乃县| 弥勒县| 兴和县| 柳江县| 南安市| 新河县| 苍溪县|