SpringBoot 實戰 (二) | 第一個 SpringBoot 工程詳解
微信公眾號:一個優秀的廢人
前言
哎呦喂,按照以往的慣例今天週六我的安排應該是待在家學學貓叫啥的。但是今年這種日子就可能一去不復返了,沒法辦法啊。前幾天年輕,立下了一週至少更兩篇文章的 flag 。廢話少說,今天接著前文給你們帶來了第一個 SpringBoot 工程的詳解。
第一個 SpringBoot 工程
前文已經說過了 SpringBoot 工程的建立,這裡不再贅述,還不會的朋友,請看下面這篇文章。
學過程式設計的都知道,學習一門新語言的第一個專案肯定是 Hello World 。那這裡也不例外,我們先建立一個非常簡單的 Hello World 工程。給大家講解 SpringBoot 的專案目錄。建立資訊如下:
由於本文重點旨在講解 SpringBoot 的專案目錄。所以選擇的依賴包非常簡單,就選擇 Web 足矣。
SpringBoot 專案目錄詳解
建立成功之後的 SpringBoot 專案目錄如下,以下對各主要目錄的作用進行講解:
- src 是整個工程的根目錄,基本上做 web 開發你的程式碼大部分都放在這裡。其中 main 目錄下放置的是你的 Java 程式碼;resource 目錄,顧名思義就是放置配置檔案、靜態資源( static )以及前端模板( template )。
- test 目錄就是放置你的單元測試程式碼。
- target 就是專案編譯生成的目錄,裡面包含程式碼編譯後的 class 檔案以及一些靜態資源和配置檔案。
- External Libraries 這裡放置了,pom.xml 匯入的依賴包。
- 其他沒提到的目錄都是不重要的。
由上圖專案目錄,可以看到有幾個檔案,這些檔案有些是我新建的,有些是專案生成的。下面我會講解:
- pom.xml 這個檔案是整個專案最重要的檔案,它包含了整個專案的依賴包。Maven 會根據這個檔案匯入相關的我們開發需要的依賴包。程式碼如下:
可以看到 pom.xml 中一共有 4 個依賴,其中只有 Junit 是我手動加入的,用於單元測試。
其他的如 Spring Boot 啟動父依賴、Spring Boot web依賴 、Spring Boot web test依賴都是建立專案時,勾選 web 選項卡而生成的。這幾個依賴包的額作用就是 內嵌 Tomcat 容器,整合各 Spring 元件。比如 如果沒有依賴 web 包 ,Spring 的兩大核心功能 IOC 和 AOP 將不會生效。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.nasus</groupId> <artifactId>helloworld</artifactId> <version>0.0.1-SNAPSHOT</version> <name>helloworld</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <!-- Spring Boot 啟動父依賴 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencies> <!-- Spring Boot web依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- Junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
- HelloworldApplication.java 最為重要,它由專案生成,是整個工程的應用啟動類 main 函式。程式碼由專案生成,程式碼如下:SpringApplication 引導應用,並將 HelloworldApplication 本身作為引數傳遞給 run 方法。具體 run 方法會啟動嵌入式的 Tomcat 並初始化 Spring環境及其各 Spring 元件。
需要注意的是,這個類必須放在其他類的上冊目錄,拿上述目錄舉個栗子, 若其他HelloWorldController.java 類位於 com.nasus.controller 下。則 HelloworldApplication.java 類必須放置在 com.nasus 下或者 com 下(層級必須大於其他 java 類)。否則啟動專案訪問會報 Whitelabel Error Page 錯誤,原因是專案掃描不到 @RestController、@RequestMapping 等註解配置的方法和類。
package com.nasus.helloworld; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class HelloworldApplication { public static void main(String[] args) { SpringApplication.run(HelloworldApplication.class, args); } }
- HelloWorldController 是我手動編寫的,程式碼如下:@RestController 和 @RequestMapping 註解是來自 SpringMVC 的註解,它們不是 SpringBoot 的特定部分。
其中 @RestController 註解的作用是:提供實現了 REST API,可以服務 JSON、XML 或者其他。這裡是以 String 的形式渲染出結果。
其中 @RestController 註解的作用是:提供路由資訊,"/“路徑的HTTP Request都會被對映到sayHello方法進行處理。
具體參考,Spring 官方的文件《 Spring Framework Document 》
package com.nasus.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * Project Name:helloworld <br/> * Package Name:com.nasus.controller <br/> * Date:2019/1/5 13:59 <br/> * <b>Description:</b> TODO: 描述該類的作用 <br/> * * @author <a href="turodog@foxmail.com">nasus</a><br/> * Copyright Notice ========================================================= * This file contains proprietary information of Eastcom Technologies Co. Ltd. * Copying or reproduction without prior written approval is prohibited. * Copyright (c) 2019 ======================================================= */ @RestController public class HelloWorldController { @RequestMapping("/hello") public String sayHello() { return "Hello,World!"; } }
寫完 Controller 層的程式碼,我們就可以啟動此專案。點選 IDEA 專案啟動按鈕,效果如下:
- 好的程式必須配備完善的單元測試。HelloWorldControllerTest.java 檔案是由我編寫的主要作用就是測試 HelloWorldController.java 中的方法。這裡用的是 Junit 依賴包進行單元測試,程式碼如下:這裡的邏輯就是測試 HelloWorldController.java 的 sayHello 方法輸出的字元是否是 Hello,World!
package com.nasus; import static org.junit.Assert.assertEquals; import com.nasus.controller.HelloWorldController; import org.junit.Test; /** * Project Name:helloworld <br/> * Package Name:com.nasus <br/> * Date:2019/1/5 14:01 <br/> * <b>Description:</b> TODO: 描述該類的作用 <br/> * * @author <a href="turodog@foxmail.com">nasus</a><br/> * Copyright Notice ========================================================= * This file contains proprietary information of Eastcom Technologies Co. Ltd. * Copying or reproduction without prior written approval is prohibited. * Copyright (c) 2019 ======================================================= */ public class HelloWorldControllerTest { @Test public void testSayHello() { assertEquals("Hello,World!",new HelloWorldController().sayHello()); } }
編寫完成之後,可以通過以下按鈕啟動單元測試類。
測試結果如下:可以看到紅圈框住的地方,出現這個綠色標誌證明單元測試沒問題。sayhello 方法的結果是對的。
後語
我為什麼要寫這種這麼簡單的教程?
是這樣的,我始終認為比我聰明的人有很多,但比我笨的人也不少。在中國有很多你認為眾所周知的事,其實有一車人根本不知道,這篇文章哪怕只幫助到一個人,足矣。
之後我打算出一個 SpringBoot 系列的教程,敬請關注與指正,本人也是一個小菜鳥在打怪升級中,如本文有不正確的地方,煩請指正。一起學習一起進步。
以上就是我對 SpringBoot 工程的理解,希望對你們有幫助。最後,對 Python 、Java 感興趣請長按二維碼關注一波,我會努力帶給你們價值,如果覺得本文對你哪怕有一丁點幫助,請幫忙點好看,讓更多人知道。
另外,關注之後在傳送 1024 可領取免費學習資料。資料內容詳情請看這篇舊文: Python、C++、Java、Linux、Go、前端、演算法資料分享