SpringBoot 實戰 (二) | 第一個 SpringBoot 工程詳解

微信公衆號:一個優秀的廢人
如有問題或建議,請後臺留言,我會盡力解決你的問題。

前言

哎呦喂,按照以往的慣例今天週六我的安排應該是待在家學學貓叫啥的。但是今年這種日子就可能一去不復返了,沒法辦法啊。前幾天年輕,立下了一週至少更兩篇文章的 flag 。廢話少說,今天接着前文給你們帶來了第一個 SpringBoot 工程的詳解。

第一個 SpringBoot 工程

前文已經說過了 SpringBoot 工程的創建,這裏不再贅述,還不會的朋友,請看下面這篇文章。

如何使用 IDEA 構建 Spring Boot 工程

學過編程的都知道,學習一門新語言的第一個項目肯定是 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 等註解配置的方法和類。

Whitelabel Error Page

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="[email protected]">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="[email protected]">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、前端、算法資料分享

一個優秀的廢人

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章