Spring Boot干貨系列:(一)優(yōu)雅的入門篇

前言

Spring一直是很火的一個開源框架,在過去的一段時間里岛马,Spring Boot在社區(qū)中熱度一直很高,所以決定花時間來了解和學(xué)習(xí)屠列,為自己做技術(shù)儲備啦逆。

正文

首先聲明,Spring Boot不是一門新技術(shù)笛洛,所以不用緊張夏志。從本質(zhì)上來說,Spring Boot就是Spring,它做了那些沒有它你也會去做的Spring Bean配置苛让。它使用“習(xí)慣優(yōu)于配置”(項目中存在大量的配置沟蔑,此外還內(nèi)置了一個習(xí)慣性的配置,讓你無需手動進行配置)的理念讓你的項目快速運行起來狱杰。使用Spring Boot很容易創(chuàng)建一個獨立運行(運行jar,內(nèi)嵌Servlet容器)瘦材、準生產(chǎn)級別的基于Spring框架的項目,使用Spring Boot你可以不用或者只需要很少的Spring配置仿畸。

Spring Boot精要

Spring將很多魔法帶入了Spring應(yīng)用程序的開發(fā)之中食棕,其中最重要的是以下四個核心。

  • 自動配置:針對很多Spring應(yīng)用程序常見的應(yīng)用功能错沽,Spring Boot能自動提供相關(guān)配置
  • 起步依賴:告訴Spring Boot需要什么功能簿晓,它就能引入需要的庫。
  • 命令行界面:這是Spring Boot的可選特性千埃,借此你只需寫代碼就能完成完整的應(yīng)用程序憔儿,無需傳統(tǒng)項目構(gòu)建。
  • Actuator:讓你能夠深入運行中的Spring Boot應(yīng)用程序放可,一套究竟谒臼。

詳細的我們就不展開唱逢,等你愛上后自然會去深入的了解,后續(xù)章節(jié)我們會一一展開介紹屋休。接下來讓我們開搞吧坞古。我已經(jīng)迫不及待的要嘗嘗Spring Boot的味道了。

系統(tǒng)要求

目前Spring Boot正式版為1.5.1.RELEASE默認情況下劫樟,Spring Boot 1.5.1.RELEASE需要Java 7和Spring Framework 4.3.6.RELEASE或更高版本,你也可以使用Spring Boot with Java 6和一些額外的配置(不建議),使用Maven(3.2+)或Gradle 2(2.9或更高版本)和3來構(gòu)建痪枫。

雖然你可以使用Java 6或7的Spring Boot,但我們通常推薦Java 8叠艳。

所以本博客系列統(tǒng)一使用Java 1.8奶陈,Spring Boot 1.5.1.RELEASE以及Maven3.3.9版本。開發(fā)工具使用IDEA(強烈推薦附较,可以看我另外一篇介紹IDEA入門文章吃粒,內(nèi)有官方中文教程:Java人員正確使用 IntelliJ IDEA的方式

光速入門-開發(fā)一個web服務(wù)

沒有比較就沒有傷害,讓我們先看看傳統(tǒng)Spring MVC開發(fā)一個簡單的Hello World Web應(yīng)用程序拒课,你應(yīng)該做什么徐勃,我能想到一些基本的需求。

  • 一個項目結(jié)構(gòu)早像,其中有一個包含必要依賴的Maven或者Gradle構(gòu)建文件僻肖,最起碼要有Spring MVC和Servlet API這些依賴。
  • 一個web.xml文件(或者一個WebApplicationInitializer實現(xiàn))卢鹦,其中聲明了Spring的DispatcherServlet臀脏。
  • 一個啟動了Spring MVC的Spring配置
  • 一控制器類,以“hello World”相應(yīng)HTTP請求冀自。
  • 一個用于部署應(yīng)用程序的Web應(yīng)用服務(wù)器揉稚,比如Tomcat。

最讓人難以接受的是熬粗,這份清單里面只有一個東西是和Hello World功能相關(guān)的搀玖,即控制器,剩下的都是Spring開發(fā)的Web應(yīng)用程序必需的通用模板荐糜。

接下來看看Spring Boot如何搞定巷怜?
很簡單,我僅僅只需要非常少的幾個配置就可以迅速方便的搭建起來一套web項目

初始化Spring Boot項目

構(gòu)建一個Sping Boot的Maven項目暴氏,強烈推薦Spring Initializr,它從本質(zhì)上來說就是一個Web應(yīng)用程序延塑,它能為你生成Spring Boot項目結(jié)構(gòu)。
Spring Initializr有幾種用法:

  • 通過Web界面使用
  1. 訪問:http://start.spring.io/

  2. 選擇構(gòu)建工具Maven Project答渔、Spring Boot版本1.5.1以及一些工程基本信息关带,可參考下圖所示

  3. 點擊Generate Project下載項目壓縮包

  4. 導(dǎo)入到你的工程,如果是IDEA,則需要:
    a.菜單中選擇File–>New–>Project from Existing Sources...
    b.選擇解壓后的項目文件夾宋雏,點擊OK
    c.點擊Import project from external model并選擇Maven芜飘,點擊Next到底為止。
    d.若你的環(huán)境有多個版本的JDK磨总,注意到選擇Java SDK的時候請選擇Java 7以上的版本

  • 通過IntelliJ IDEA使用(個人推薦)
    IntelliJ IDEA是非常流行的IDE嗦明,IntelliJ IDEA 14.1已經(jīng)支持Spring Boot了。
    創(chuàng)建Spring Boot操作步驟如下:
    在File菜單里面選擇 New > Project,然后選擇Spring Initializr蚪燕,接著如下圖一步步操作即可娶牌。

項目結(jié)構(gòu)

根據(jù)上面的操作已經(jīng)初始化了一個Spring Boot的框架了,項目結(jié)構(gòu)如下:


如你所見馆纳,項目里面基本沒有代碼诗良,除了幾個空目錄外,還包含如下幾樣?xùn)|西鲁驶。

  • pom.xml:Maven構(gòu)建說明文件鉴裹。
  • Chapter1Application.java:一個帶有main()方法的類,用于啟動應(yīng)用程序(關(guān)鍵)钥弯。
  • Chapter1ApplicationTests.java:一個空的Junit測試類径荔,它加載了一個使用Spring Boot字典配置功能的Spring應(yīng)用程序上下文。
  • application.properties:一個空的properties文件寿羞,你可以根據(jù)需要添加配置屬性猖凛。

解析pom.xml

大家跟我一起移步pom.xml,看看Spring Boot的跟普通Spring MVC工程的Maven配置有啥不一樣

<?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.dudu</groupId>
    <artifactId>chapter1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>chapter1</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

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

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

可以看出,有幾個配置是不大一樣的,我們挑幾個重要的說說绪穆,要是客觀不想過早的了解這些,自行跳過這一知識點即可虱岂。

Spring Boot父級依賴

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

這塊配置就是Spring Boot父級依賴玖院,有了這個,當前的項目就是Spring Boot項目了第岖,spring-boot-starter-parent是一個特殊的starter,它用來提供相關(guān)的Maven默認依賴难菌,使用它之后,常用的包依賴可以省去version標簽蔑滓。關(guān)于Spring Boot提供了哪些jar包的依賴郊酒,可查看C:\Users\用戶.m2\repository\org\springframework\boot\spring-boot-dependencies\1.5.1.RELEASE\spring-boot-dependencies-1.5.1.RELEASE.pom
這里我就貼一點點意思意思,如下:

<properties>
        <!-- Dependency versions -->
        <activemq.version>5.14.3</activemq.version>
        <antlr2.version>2.7.7</antlr2.version>
        <appengine-sdk.version>1.9.48</appengine-sdk.version>
        <artemis.version>1.5.2</artemis.version>
        <aspectj.version>1.8.9</aspectj.version>
        <assertj.version>2.6.0</assertj.version>
        <atomikos.version>3.9.3</atomikos.version>
        <bitronix.version>2.1.4</bitronix.version>
        <caffeine.version>2.3.5</caffeine.version>
        <cassandra-driver.version>3.1.3</cassandra-driver.version>
        <classmate.version>1.3.3</classmate.version>
        <commons-beanutils.version>1.9.3</commons-beanutils.version>
        <commons-collections.version>3.2.2</commons-collections.version>
        <spring-data-releasetrain.version>Ingalls-RELEASE</spring-data-releasetrain.version>
        ......
</properties>

如果你不想使用某個依賴默認的版本键袱,您還可以通過覆蓋自己的項目中的屬性來覆蓋各個依賴項燎窘,例如,要升級到另一個Spring Data版本系列蹄咖,您可以將以下內(nèi)容添加到pom.xml中褐健。

<properties>
    <spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version>
</properties>

原本默認版本是Ingalls-RELEASE的(看上面最后一行有說明<spring-data-releasetrain.version>Ingalls-RELEASE</spring-data-releasetrain.version>),現(xiàn)在就使用Fowler-SR2版本了澜汤,簡單吧蚜迅。

并不是每個人都喜歡繼承自spring-boot-starter-parent POM舵匾。您可能有您需要使用的自己的公司標準parent,或者您可能更喜歡顯式聲明所有的Maven配置谁不。
如果你不想使用spring-boot-starter-parent坐梯,您仍然可以通過使用scope = import依賴關(guān)系來保持依賴關(guān)系管理:

<dependencyManagement>
     <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>1.5.1.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

該設(shè)置不允許您使用如上所述的屬性(properties)覆蓋各個依賴項,要實現(xiàn)相同的結(jié)果刹帕,您需要在spring-boot-dependencies項之前的項目的dependencyManagement中添加一個配置吵血,例如,要升級到另一個Spring Data版本系列轩拨,您可以將以下內(nèi)容添加到pom.xml中践瓷。

<dependencyManagement>
    <dependencies>
        <!-- Override Spring Data release train provided by Spring Boot -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-releasetrain</artifactId>
            <version>Fowler-SR2</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>1.5.1.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

起步依賴 spring-boot-starter-xx

Spring Boot提供了很多”開箱即用“的依賴模塊,都是以spring-boot-starter-xx作為命名的亡蓉。舉個例子來說明一下這個起步依賴的好處晕翠,比如組裝臺式機和品牌機,自己組裝的話需要自己去選擇不同的零件砍濒,最后還要組裝起來淋肾,期間有可能會遇到零件不匹配的問題。耗時又消力爸邢,而品牌機就好一點樊卓,買來就能直接用的,后續(xù)想換零件也是可以的杠河。相比較之下碌尔,后者帶來的效果更好點(這里就不討論價格問題哈),起步依賴就像這里的品牌機券敌,自動給你封裝好了你想要實現(xiàn)的功能的依賴唾戚。就比如我們之前要實現(xiàn)web功能,引入了spring-boot-starter-web這個起步依賴待诅。我們來看看spring-boot-starter-web到底依賴了哪些,如下圖:


嘿嘿嘿叹坦,看來依賴了好多呢,如果讓我自己弄估計要調(diào)半天卑雁,所以Spring Boot通過提供眾多起步依賴降低項目依賴的復(fù)雜度募书。起步依賴本質(zhì)上是一個Maven項目對象模型(Project Object Model,POM)测蹲,定義了對其他庫的傳遞依賴莹捡,這些東西加在一起即支持某項功能。很多起步依賴的命名都暗示了它們提供的某種或者某類功能弛房。

Spring Boot Maven插件

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

上面的配置就是Spring Boot Maven插件道盏,Spring Boot Maven插件提供了許多方便的功能:

  • 把項目打包成一個可執(zhí)行的超級JAR(uber-JAR),包括把應(yīng)用程序的所有依賴打入JAR文件內(nèi),并為JAR添加一個描述文件,其中的內(nèi)容能讓你用java -jar來運行應(yīng)用程序荷逞。
  • 搜索public static void main()方法來標記為可運行類媒咳。

應(yīng)用入口類

Chapter1Application是一個很關(guān)鍵的啟動類,程序的入口就是這里,為了演示簡單种远,我們不再新建控制類涩澡,而是直接在這個入口類中編寫,添加@RestController以及index方法坠敷,如下:

package com.dudu;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class Chapter1Application {

    @RequestMapping("/")
    public String index(){
        return "Hello Spring Boot";
    }
    public static void main(String[] args) {
        SpringApplication.run(Chapter1Application.class, args);
    }
}

  1. @SpringBootApplication是Sprnig Boot項目的核心注解妙同,主要目的是開啟自動配置。后續(xù)講解原理的時候再深入介紹膝迎。

  2. main方法這是一個標準的Java應(yīng)用的main的方法粥帚,主要作用是作為項目啟動的入口。

  3. @RestController注解等價于@Controller+@ResponseBody的結(jié)合限次,使用這個注解的類里面的方法都以json格式輸出芒涡。

最后,啟動項目有三種方式:

  • Chapter1Application的main方法


  • 使用命令 mvn spring-boot:run”在命令行啟動該應(yīng)用卖漫,IDEA中該命令在如下位置:


  • 運行“mvn package”進行打包時费尽,會打包成一個可以直接運行的 JAR 文件,使用“java -jar”命令就可以直接運行羊始。



打開瀏覽器訪問http://localhost:8080, 你就能看到頁面顯示Hello Spring Boot效果了旱幼,一個簡單的Web的項目就是如此簡單。

結(jié)束

雖然我上面講解了那么多突委,但是實際開發(fā)步驟就是那么簡單暴力柏卤,初始化一個Spring Boot,添加一個控制類匀油,啟動就能看到效果了闷旧。
本章作為入門Spring Boot的入門介紹,相關(guān)的需要理解的概念就只有這幾點:

  • Spring Boot父級依賴的概念
  • 起步依賴 spring-boot-starter-xx的概念
  • 應(yīng)用入口類的作用

想要查看更多Spring Boot干貨教程,可前往:Spring Boot干貨系列總綱

源碼下載

( ̄︶ ̄)↗[相關(guān)示例完整代碼]


一直覺得自己寫的不是技術(shù)钧唐,而是情懷,一篇篇文章是自己這一路走來的痕跡匠襟《巯溃靠專業(yè)技能的成功是最具可復(fù)制性的,希望我的這條路能讓你少走彎路酸舍,希望我能幫你抹去知識的蒙塵帅韧,希望我能幫你理清知識的脈絡(luò),希望未來技術(shù)之巔上有你也有我啃勉。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末忽舟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌叮阅,老刑警劉巖刁品,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異浩姥,居然都是意外死亡挑随,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門勒叠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兜挨,“玉大人,你說我怎么就攤上這事眯分“杌悖” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵弊决,是天一觀的道長噪舀。 經(jīng)常有香客問我,道長丢氢,這世上最難降的妖魔是什么傅联? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮疚察,結(jié)果婚禮上蒸走,老公的妹妹穿的比我還像新娘。我一直安慰自己貌嫡,他們只是感情好比驻,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著岛抄,像睡著了一般别惦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上夫椭,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天掸掸,我揣著相機與錄音,去河邊找鬼蹭秋。 笑死扰付,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的仁讨。 我是一名探鬼主播羽莺,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼洞豁!你這毒婦竟也來了盐固?” 一聲冷哼從身側(cè)響起荒给,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎刁卜,沒想到半個月后志电,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡长酗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年溪北,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夺脾。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡之拨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出咧叭,到底是詐尸還是另有隱情蚀乔,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布菲茬,位于F島的核電站吉挣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏婉弹。R本人自食惡果不足惜睬魂,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望镀赌。 院中可真熱鬧氯哮,春花似錦、人聲如沸商佛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽良姆。三九已至肠虽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間玛追,已是汗流浹背税课。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留痊剖,地道東北人伯复。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像邢笙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子侍匙,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容