Java | 第一個 SpringBoot 工程詳解

2021-02-16 一個優秀的廢人

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

前言

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

第一個 SpringBoot 工程

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

Java | 如何使用 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>

    
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath/> 
    </parent>

    <dependencies>
        
        <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>

        
        <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 官方的文檔https://docs.spring.io/spring/docs/current/spring-framework-reference/

package com.nasus.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@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;


public class HelloWorldControllerTest {

    @Test
    public void testSayHello() {
        assertEquals("Hello,World!",new HelloWorldController().sayHello());
    }

}

編寫完成之後,可以通過以下按鈕啟動單元測試類。

運行單元測試

測試結果如下:可以看到紅圈框住的地方,出現這個綠色標誌證明單元測試沒問題。sayhello 方法的結果是對的。

單元測試結果後語

我為什麼要寫這種這麼簡單的教程?
是這樣的,我始終認為比我聰明的人有很多,但比我笨的人也不少。在中國有很多你認為眾所周知的事,其實有一車人根本不知道,這篇文章哪怕只幫助到一個人,足矣。

之後我打算出一個 SpringBoot 系列的教程,敬請關注與指正,本人也是一個小菜鳥在打怪升級中,如本文有不正確的地方,煩請指正。一起學習一起進步。

以上就是我對 SpringBoot 工程的理解,希望對你們有幫助。最後,對 Python 、Java 感興趣請長按二維碼關注一波,我會努力帶給你們價值,如果覺得本文對你哪怕有一丁點幫助,請幫忙點好看,讓更多人知道。

一個優秀的廢人

相關焦點

  • SpringBoot實現QQ郵箱註冊和登錄
    3.1、UserController.java 3.2、UserMapper.java 3.3、User.java 3.4、MailService.java ,重要。
  • 黑馬程式設計師:SpringBoot教程,SpringBoot高級之原理分析
    創建一個模塊,springboot-condition:@SpringBootApplicationpublic class SpringbootConditionApplication {public static void main(String[] args) {//啟動springBoot的應用,返回spring的IOC容器ConfigurableApplicationContext
  • 全網最細緻的SpringBoot實戰教程,超適合新手小白入坑學習
    2.IDEA的默認修改:修改IDEA的默認maven ,具體看下面的博客https://blog.csdn.net/weixin_43034040/article/details/103835125HelloWorld項目瀏覽器發送hello請求,伺服器接收請求並處理,響應Hello World 字符串第1步.創建一個maven工程
  • springboot+springsecurity實現前後端分離簡單實現!
    1.2、技術支持jdk 1.8、springboot 2.3.4、mybatis-plus 3.4.1、mysql 5.5、springsecurity 5.3.4、springmvc、lombok簡化entity代碼,不用你去寫get、set方法,全部自動生成、gson 2.8.2 將json對象轉化成json字符串
  • java集合詳解合集
    所以的集合類都位於java.util包下,後來為了處理多線程環境下的並發安全問題,java5還在java.util.concurrent包下提供了一些多線程支持的集合類。在學習Java中的集合類的API、編程原理的時候,我們一定要明白,"集合"是一個很古老的數學概念,它遠遠早於Java的出現。
  • Java 枚舉(enum) 詳解7種常見的用法
    在java中如何更好的使用這些「數據集」呢?因此枚舉便派上了用場,以下代碼詳細介紹了枚舉的用法。JDK1.5引入了新的類型——枚舉。在 Java 中它雖然算個「小」功能,卻給我們的開發帶來了「大」方便。在JDK1.5 之前,我們定義常量都是: public static fianl.... 。
  • 基於SpringBoot Cloud構建的一個商城項目源碼分享
    基於springboot cloud構建的一個商城項目,包括前端,後端和h5應用,小程序,作為zscat應用實踐的模板項目。基於SpringBoot2.x、SpringCloud和SpringCloudAlibaba並採用前後端分離的企業級微服務敏捷開發系統架構。
  • 怎樣能學好Java?在項目實戰中我漸漸成長
    在初次來到這裡時,我和其他同學一樣懷著興奮得心情,或許是單純的對這個新環境的好奇、也或許是曾經對這兒有一點了解想親自見證一下,因為聽學長說過多接觸實戰項目才能學到與學校不同的東西,才能更接近實際項目工程。的確如他們所說,運行程序前必須做許多準備工作。
  • Java之final關鍵字詳解
    代碼:每日一題下面有關java代碼安全性的敘述哪些是對的?A、字節碼校驗器加載查詢執行需要的所有的類。B、運行時解釋器執行代碼。C、在運行時,字節碼被加載,驗證然後在解釋器裡面去運行。D、類加載器通過分離本機文件系統的類和從網絡導入的類增加安全性。
  • 這些 Java 8 官方挖的坑,你踩過幾個?
    Caused by: java.lang.IllegalArgumentException: Illegal base64 character 3f    at java.util.Base64$Decoder.decode0(Base64.java:714)    at java.util.Base64$Decoder.decode
  • java集合【6】——— Iterable接口
    內部定義的方法 java集合最源頭的接口,實現這個接口的作用主要是集合對象可以通過迭代器去遍歷每一個元素。            if(item.equals("Jam")){                list.remove(item);            }            System.out.println(item);        }    }從下面的錯誤我們可以看出,第一個元素是有被列印出來的
  • Java中設置classpath、path、JAVA_HOME的作用?
    path:Windows系統執行命令時要搜尋的路徑在dos命令行中執行命令的時候,會先從當前路徑去找,如果找不到,就會到path路徑下去找比如我的jdk裝在D盤下,當我在C盤執行java -version的時候會出現找不到java命令的情況,設置path的目的就是當在
  • 剖析Java 集合框架(七)-HashMap為什麼線程不安全
    : java.util.HashMap$Node cannot be cast to java.util.HashMap$TreeNode at java.util.HashMap$TreeNode.moveRootToFront(HashMap.java:1819) at java.util.HashMap$TreeNode.treeify(HashMap.java:1936)
  • Kotlin VS Java:基本語法差異
    ,歡迎加入Java和Android架構社區Android開發規範和架構總結5月18號,goole宣布Kotlin成為官方支持的開發語言以來,Kotlin語言社區,公眾號,qq群等全面轟炸,本文是一篇譯文,來自國外的一個用戶,將給大家介紹,基礎語法部分Kotlin和java
  • java練習本(2019-06-12)
    題目java語言使用的字符集是?2.答案解析A.這是一種常用於會計系統中的編碼方式,與java關係不大,錯誤B.ASCII碼1961年提出,是目前使用最廣泛的西文字符集,但不是java使用的編碼C.GBK為一種漢子編碼格式,包含了大量的漢子編碼,java也並未使用它最為編碼格式D.Unicode編碼是一種將世界上所有符號都納入其中的編碼格式來避免編碼不匹配的亂碼問題
  • 魔方軟體|胡波系列Java助手
    這個系列的第一篇,我打算介紹一下「胡波系列java助手」——讀過我自己的玩魔方十年總結的朋友可能知道,這個系列的模擬器對我有很大的影響,我操作這個模擬器的時間應該累計也有200個小時以上。因此,雖說可能這不是現在最好的模擬器,我還是想第一個來介紹它。
  • 簡單聊聊Python後端開發和Java後端的區別
    但是在springboot中(微服務框架),我們首先需要創建一個微服務項目,然後創建controller包,然後創建一個Controller,再編寫接口。springboot項目架構
  • [博客更新]Java 中 final 關鍵詞的使用
    上一篇文章我們講了 java 中 static 關鍵字的使用,這裡再將一下 final 關鍵字的使用。final 在 java 中可以看做一個「終結者」,它可以定義類、定義方法和定義變量。method is final */System.out.println("我叫"+name+" 來自"+city+" 學號為"+id);}}publicclassFinalClassDemo{publicstaticvoid main(String[] args){}}就這樣吧博客文章地址:https://blog.sunriseydy.top/technology/code/java
  • 重學Java 設計模式:實戰備忘錄模式「模擬網際網路系統上線過程中...
    工程結構2. 代碼實現3. 測試驗證六、總結一、前言實現不了是研發的藉口?二、開發環境JDK 1.8Idea + Maven涉及工程一個,可以通過關注「公眾號」:bugstack蟲洞棧,回復源碼下載獲取(打開獲取的連結,找到序號18)三、備忘錄模式介紹備忘錄模式,圖片來自 refactoringguru.cn