Spring Boot--2.why什么使用spirng boot

學習網(wǎng)站:spring boot

Spring Boot的優(yōu)勢

自動配置

根據(jù)Classpath中的包自動配置相應的bean.

起步依賴

作用

  • 使用場景
    一般我們開發(fā)一個web程序亭引,如果想使用Thymeleaf視圖兔魂、通過JPA進行數(shù)據(jù)持久化。
    為了添加Thymeleaf視圖和Jpa的支持,我們不得不添加相關依賴,而添加依賴我們不僅需要知道每個依賴的坐標而且還要保證各依賴之間的兼容。光一個一個找這些依賴就比較麻煩了啊送。而且在還沒有代碼的情況,我們是不知道添加的依賴到底完不完整的欣孤。所以開發(fā)一個web程序還沒寫一行代碼之前馋没,光是找各種依賴架包就是一個挺麻煩的事情了。而且降传,如果我們下次再寫一個web程序時篷朵,好的情況是直接把上次找好的依賴添加過來,壞的情況是婆排,新寫的web需要添加新的依賴声旺,而這個依賴很有可能導致和其它依賴版本不兼容,所以還會產(chǎn)生重新找的問題段只。
  • 起步依賴作用
    如果我們在構建文件里指定這些功能:開發(fā)Web程序腮猖,使用Thymeleaf視圖和Jpa的支持。讓構建過程自己搞明白我們需要什么東西赞枕,豈不是更簡單澈缺?這正是Spring Boot起步依賴的功能。

指定基于功能的依賴

  • Spirng Boot通過提供眾多起步依賴降低項目依賴的復雜度炕婶。起步依賴本質(zhì)上是一個Maven項目對象模型(Project Object Model姐赡,POM),定義了對其他庫的傳遞依賴柠掂,這些東西加在一起即支持某項功能项滑。 很多起步依賴度額命名都暗示了它們提供的某種或某類功能。
    比如起步依賴spring-boot-starter-web陪踩,他是一個package類型為jar的maven項目杖们,項目里除了一個pom.xml文件外沒有任何代碼文件悉抵。而pom.xml里則聲明了對各種web開發(fā)可能用到依賴。
  • spring-boot-starter-web起步依賴的pom.xml中依賴的聲明:
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
        </dependency>
    </dependencies>
  • 由此可見摘完,起步依賴是服務于某一類功能的一些依賴的集合姥饰,當在項目中聲明起步依賴時,通過依賴傳遞孝治,就相當于聲明了其它依賴列粪。再簡單點:spring把大部分依賴按照功能進行分類,然后通過起步依賴來管理每一類谈飒。每一個起步依賴都代表一類依賴岂座。
  • 舉例
    • 你打算做一個閱讀列表Web應用程序。與其向項目的構建文件中添加一堆單獨庫依賴杭措,還不如聲明這是一個Web應用程序來的簡單费什。你只要添加Spring Boot的Web起步依賴就好了。
  • 想以Thymeleaf為Web視圖手素,用JPA來實現(xiàn)數(shù)據(jù)持久化鸳址,因此在構建文件中添加Thymeleaf和Spring Data JPA的起步依賴。為了進行測試泉懦,還需要能在Spring Boot上下文里運行集成測試的庫稿黍,因此添加test起步依賴。
    最終添加的依賴如下:
...
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
               <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <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>
...
  • 這4個起步依賴的具體程度恰到好處崩哩,我們并沒有說想要SpringMVC,只是想說要構建一個Web應用程序巡球。并沒有說指定JUnit或其他測試工具,只是所想要測試自己的代碼邓嘹。Thymeleaf和Spring Data JPA的起步依賴稍微具體一點酣栈。

  • 如果你想知道自己聲明了那些依賴,通過maven構建的項目吴超,可以使用mvn dependency:tree命令來查看依賴樹钉嘹。

  • 起步依賴沒有指定版本號,因為起步依賴本身是由正在使用的spring-boot-starter-parent的版本來決定的鲸阻,而起步依賴的版本則決定它們引入的傳遞依賴的版本。

  • 當前spring-boot項目-->spring-boot-starter-parent-->spring-boot-dependencies缨睡。而在spring-boot-dependencies中的依賴管理中申明了所有起步依賴鸟悴。所以說起步依賴本身的版本有正在使用的spring-boot-starter-parent的版本決定。

  • spring boot官方起步依賴的命名規(guī)則:spring-boot-starter-*奖年。 *代表具體的模塊细诸。比如spring-boot-starter-web。這就是web開發(fā)的起步依賴陋守。


spring官網(wǎng)的一些摘要

  • Spring Boot provides a number of “Starters” that make easy to add jars to your classpath.

  • 其中spring-boot-starter-parent起步依賴震贵,spring-boot一般都會繼承它利赋,它不會往項目中添加任何依賴,它只是提供了一個依賴管理(dependency-management )猩系,這樣你就可以不需要為后續(xù)的依賴申明版本了媚送。

  • Maven users can inherit from the spring-boot-starter-parent project to obtain sensible defaults. The parent project provides the following features:

  • Java 1.6 as the default compiler level.

  • UTF-8 source encoding.

  • A Dependency Management section, allowing you to omit <version> tags for common dependencies, inherited from the spring-boot-dependencies POM.

  • Sensible resource filtering.

  • Sensible plugin configuration (exec plugin, surefire, Git commit ID, shade).

  • Sensible resource filtering for application.properties and application.yml including profile-specific files (e.g. application-foo.properties and application-foo.yml)

  • spring-boot-starter-parent繼承了spring-boot-dependencies

覆蓋起步依賴引入的傳遞依賴

  • 大部分情況下,你都無需關心每個spring boot起步依賴分別聲明了些什么東西寇甸。Web起步依賴讓你構建Web應用程序塘偎,Thymeleaf起步依賴讓你用Thymeleaf模板。但是即使經(jīng)過Spring Boot團隊的測試拿霉,起步依賴里所選的依賴仍有問題怎么辦吟秩,如何覆蓋起步依賴呢?

  • 覆蓋起步依賴中通過傳遞依賴加入的依賴有兩種原因:1.起步依賴中聲明的依賴我用不到绽淘,為了給程序瘦身涵防,在打包的時候我想把沒用的依賴都排除掉,比如web起步依賴中聲明了jackson依賴沪铭,但是這個依賴我在程序中用不到壮池。2.起步依賴中聲明的依賴版本不滿足要求。

  • 針對第1種情況伦意,如果使用maven構建項目火窒,則使用exclusions標簽來排除。

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
         <exclusions>
           <exclusion>
               <groupId>com.fasterxml.jackson.core</groupId>
           </exclusion>
        </exclusions>
    </dependency>  
  • 針對第2中情況:有兩種辦法
    1:因為所有起步依賴涉及的依賴的版本都在 spring-boot-dependencies
    中聲明了驮肉,所以可以在當前項目的pom.xml中覆蓋之前屬性熏矿。比如
<properties>
    <spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version>
</properties>

在做這個之前你需要知道你要修改的依賴的版本屬性在spring-boot-dependencies中的名稱。spring-boot-dependencies ->pom 离钝。遺憾的是票编,不是每一個依賴的版本在dependencies 都有聲明,像web起步依賴中的jackson依賴在dependencies 中就沒有關于依賴版本屬性的聲明卵渴,那么它的版本在哪里呢慧域?答:該依賴是dependencies 中聲明的某個依賴傳遞過來的。面對這種情況只能采用第二種辦法浪读。
2:根據(jù)maven的就近原則昔榴。在當前項目中聲明該依賴,則傳遞過來的依賴就會被取代碘橘。

<dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>填寫你想要的版本</veriosn>
</dependency>

命令行界面

Actuator

Spring Boot程序推薦的代碼組織結構


Paste_Image.png

構造函數(shù)依賴注入

package com.example.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class DatabaseAccountService implements AccountService {

    private final RiskAssessor riskAssessor;

    @Autowired
    public DatabaseAccountService(RiskAssessor riskAssessor) {
        this.riskAssessor = riskAssessor;
    }

    // ...

}
Notice how using constructor injection allows the riskAssessor field to be marked as final, indicating that it cannot be subsequently changed.
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末互订,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子痘拆,更是在濱河造成了極大的恐慌仰禽,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異吐葵,居然都是意外死亡规揪,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門温峭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來猛铅,“玉大人,你說我怎么就攤上這事诚镰∞确兀” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵清笨,是天一觀的道長月杉。 經(jīng)常有香客問我,道長抠艾,這世上最難降的妖魔是什么苛萎? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮检号,結果婚禮上腌歉,老公的妹妹穿的比我還像新娘。我一直安慰自己齐苛,他們只是感情好翘盖,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凹蜂,像睡著了一般馍驯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上玛痊,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天汰瘫,我揣著相機與錄音,去河邊找鬼擂煞。 笑死混弥,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的对省。 我是一名探鬼主播蝗拿,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蒿涎!你這毒婦竟也來了蛹磺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤同仆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后裙品,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體俗批,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡俗或,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了岁忘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辛慰。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖干像,靈堂內(nèi)的尸體忽然破棺而出帅腌,到底是詐尸還是另有隱情,我是刑警寧澤麻汰,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布速客,位于F島的核電站,受9級特大地震影響五鲫,放射性物質(zhì)發(fā)生泄漏溺职。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一位喂、第九天 我趴在偏房一處隱蔽的房頂上張望浪耘。 院中可真熱鬧,春花似錦塑崖、人聲如沸七冲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽澜躺。三九已至,卻和暖如春聋呢,著一層夾襖步出監(jiān)牢的瞬間苗踪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工削锰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留通铲,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓器贩,卻偏偏與公主長得像颅夺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蛹稍,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

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