大清朝早亡了,還沒有入門 Spring Boot?

由於讀者的數量越來越多,難免會被問到一些我自己都覺得不好意思的問題,比如說前幾天小王就問我:「二哥,快教教我,怎麼通過 Spring Boot 創建一個 Hello World 項目啊?」

收到問題的時候,我都驚呆了!什麼年頭了,還不會用 Spring Boot,大清朝早亡了啊!

沒等我發牢騷,小王就緊接著說:「二哥,你先別生氣,我投了 14 份簡歷才在三線小鎮的一家小公司找到一份實習工作,不容易啊,領導給我安排了一個小活兒,就是搭一個 Spring Boot 的小項目,估計是測試我的實戰能力吧。聽說二哥熱腸古道,我就抱著試一試的心態添加了你的好友。」

話說到這份上,我的氣自然也就消了。隨後,我花了五分鐘的時間幫他解決了苦惱,沒成想,他還發給我了一個小紅包,表示對我的感謝。並建議我寫一篇文章出來,因為他覺得像他這樣的小白還有很多。期初我是有些猶豫的,畢竟網上寫 Spring Boot 的文章已經很多了,況且還是「Hello World」,寫出來會不會遭人噴啊。但轉念一想,哪怕只有一個讀者需要也是我們作者應盡的義務啊。於是就有了大家看到的這篇文章。

00、Spring Boot 簡介

我猜,大家一定編寫過基於 Spring 的應用程式,你就知道一個「Hello World」就需要大量的配置。想一想,我自己都有點懷疑,還能不能創建的出來,尤其是那些 XML 文件,完全敲不出來。

Spring Boot 使您能輕鬆地創建獨立的、生產級的、基於 Spring 且能直接運行的應用程式。我們對 Spring 平台和第三方庫有自己的看法,所以您從一開始只會遇到極少的麻煩。

看看 Spring Boot 官網對自己的「王婆賣瓜自賣自誇」,感覺確實優秀啊。這意味著我們只需極少的配置,就可以快速創建一個可以正常運行的 Spring 應用程式。而且這些極少的配置採用的是註解的方式,沒有 XML。

總之呢,Spring Boot 是一個輕量級的框架,可以完成基於 Spring 的應用程式的大部分配置工作。

01、使用 Spring Initlallzr 創建 Spring Boot 項目

創建一個 Spring Boot 項目非常簡單,通過 Spring Initlallzr(//start.spring.io/)就可以了。(實際上,我也只是把這個網址扔給了小王。)

1)第一個選項一般選擇 Maven(Java 後端項目首選),Gradle 在Android項目中用的比較多。如果還不太了解 Maven,請查看我以前寫的一篇文章:Maven 入門

2)第二個選項一般選擇 Java。

3)第三個選項默認為 2.2.2,Spring Boot 目前最穩定的版本。

4)第四個選項填上項目的路徑和名稱。

5)第五個選項,我們選擇 Spring Web 和 Spring Boot Actuator,表明該項目是一個 Web 項目;Actuator 是 Spring Boot 提供的對應用系統的自省和監控的集成功能,可以查看應用配置的詳細資訊,例如自動化配置資訊、創建的 Spring beans 以及一些環境屬性等。

選項選擇完後,就可以點擊【Generate】按鈕生成一個初始化的 Spring Boot 項目了。生成的是一個壓縮包,導入到 IDE 的時候需要先解壓。

02、把 Spring Boot 項目導入 IDEA

最近迷上了 IDEA,所以暫時就不再使用 Eclipse 了。如果實在是不習慣 IDEA,可以選擇 Spring 自己的 IDE——STS,基於 Eclipse 的。

PS:導入的過程就省略了,請選擇 Maven 就對了。

等待 Maven 把所有的依賴包下載完。

項目的目錄結構圖如下所示。

1)HelloSpringBootApplication 為項目的入口,帶有 main() 方法。我們知道,傳統的 Web 項目通常需要放到 Tomcat 等容器下面啟動運行,而 main() 方法則預示著該項目可以作為一個 jar 包直接運行——因為 Spring Boot 已經內置了 Tomcat。

2)大家一定對 @SpringBootApplication 註解非常好奇,它的源碼大致如下:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)

從這些註解中,我們大致可以窺探出,Spring Boot 項目使用了大量的註解取代了以往繁瑣的 xml 配置。

03、編輯 Spring Boot 項目

來看下面這段程式碼。

@SpringBootApplication
@RestController
public class HelloSpringBootApplication {

    public static void main(String[] args) {
        SpringApplication.run(HelloSpringBootApplication.class, args);
    }

    @RequestMapping("hello")
    public String hello() {
        return "Hello World";
    }
}

1)@RestController 註解相當於 @ResponseBody@Controller,意味著請求返回的對象可以直接以 JSON 的格式回顯。

2)hello() 方法非常簡單,返回一個字元串「Hello World」。@RequestMapping 表明這個方法是一個請求映射。

04、運行 Spring Boot 項目

接下來,我們直接運行 HelloSpringBootApplication 類,這樣一個 Spring Boot 項目就啟動成功了。

默認埠為 8080。

這時候,可以直接在 IDEA 的 Terminal 面板中測試該項目是否啟動成功。

命令行為 curl //localhost:8080/hello。之所以不需要項目路徑 helloSpringBoot,是因為默認啟動的時候相當於是一個 ROOT 級別的,所以不需要根目錄。

curl 是一個常用的命令行工具,用來請求 Web 伺服器。它的名字就是客戶端(client)和 URL 的合體。curl 的功能非常強大,命令行參數多達幾十種。如果運用熟練的話,完全可以取代 Postman。

05、jar 形式運行 Spring Boot 項目

打開 pom.xml,我們可以看到如下內容:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

這意味著我們可以通過 maven 命令 mvn clean package 將 Spring Boot 項目打包成 jar 文件。

也可以加上參數用於跳過打包時候的測試:mvn clean package -Dmaven.test.skip

稍等片刻,就可以在 target 目錄下看到對應的 jar 包。該 jar 包比起傳統的 war 包更具有優勢,因為不需要再單獨開一個容器來跑項目了,Spring Boot 內置過了。原生的 jar 文件(.jar.original)只有不到 3 kb,非常小,因為沒幾行程式碼,但打包後 .jar 文件有 19 M,這說明 Spring Boot 幫我們做了很多肉眼看不到的工作。

直接使用 java -jar helloSpringBoot-0.0.1-SNAPSHOT.jar 命令運行該 jar 包,同樣可以看到 Tomcat 的啟動資訊。

這次,我們使用瀏覽器來訪問一下。

也是 OK 的,這說明我們的第一個 Spring Boot 程式跑起來了。快給自己點個贊。

06、鳴謝

好了,親愛的讀者朋友們,答應小王的文章終於寫完了。能看到這裡的都是最優秀的程式設計師,升職加薪就是你了👍。本文配套的源碼已上傳至 GitHub 【SpringBootDemo.helloSpringBoot】。

如果覺得文章對你有點幫助,請微信搜索「 沉默王二 」第一時間閱讀。

本文已收錄 GitHub,傳送門~ ,裡面更有大廠面試完整考點,歡迎 Star。

我是沉默王二,一枚有顏值卻靠才華苟且的程式設計師。關注即可提升學習效率,別忘了三連啊,點贊、收藏、留言,我不挑,嘻嘻