<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SpringBoot的Starter工作原理

          共 2495字,需瀏覽 5分鐘

           ·

          2020-08-08 19:54


          本文公眾號來源:編程新說
          作者:編程新說李新杰
          本文已收錄至我的GitHub


          生產(chǎn)資料,優(yōu)先到位


          生產(chǎn)資料就是用于正常生產(chǎn)工作所需要的一切東西。

          從古代戰(zhàn)爭來講,那就是“兵馬未動,糧草先行”。所以糧草就是生產(chǎn)資料。

          從我們碼農(nóng)來講,正常開發(fā)所需要的都是生產(chǎn)資料,這里有一塊很重要的資料,就是所有依賴的第三方jar包。

          我們不需要重復造輪子,也不需要從零開始,所以直接拿來就用,拿來的其實就是jar包。

          jar包只是一些基礎代碼,而且很多原本和Spring或SpringBoot沒有關系,現(xiàn)在要和Spring或SpringBoot整合使用,就必須按Spring或SpringBoot的Style進行。


          傳統(tǒng)的和Spring整合的方式


          還以MyBatis和Spring整合為例,因為每個Java開發(fā)人員對它都非常熟悉。

          要完成這個整合,需要三個方面的jar包:

          一是Spring的jar包。

          二是MyBatis的jar包。

          三是整合時使用的jar包。

          這三方面的jar包都需要自己手動一一引入。

          引入Spring的jar包:



          引入MyBatis的jar包:


          引入整合的jar包:


          還有一個問題,就是當引入的jar包足夠多時,jar包之間的版本號有時會有沖突,需要自己慢慢測試,頗為麻煩。

          jar包導入之后,就該自己寫代碼進行Bean注冊了,因為Spring的Style就是Bean注冊。


          主要包括四方面內(nèi)容:

          1、注冊SqlSessionFactory這個Bean

          2、指定mybatis的mybatis-config.xml配置文件路徑

          3、指定mybatis的mapper.xml映射文件的路徑

          4、指定源碼包路徑并掃描所有@Mapper注解接口

          這里面有兩個問題,不是十分友好:

          1、jar包版本號問題,有時確實麻煩

          2、注冊Bean的代碼幾乎都一樣,而且每次都要手動注冊


          SpringBoot幫你解決


          對于jar包的版本號問題,SpringBoot幫你搞定,它經(jīng)過測試,把常用的依賴及其適合的版本號都通過依賴管理的方式包含在pom文件中。



          注意,這里只是依賴管理,并不是引入依賴。如需使用的話,還需要引入,只不過不用再指定版本號了。

          對于注冊Bean的問題,SpringBoot也幫你搞定,它把這些注冊代碼都已寫好,然后通過各種“條件注解”來進行自動配置,所以最終會不會被注冊,還要看運行時的“條件”。

          這其實就是SpringBoot的自動配置了,具體可參考前兩篇文章。


          Starter就是一個啟用入口


          汽車造好之后,就只給我們留了一個一鍵啟動的按鍵,踩著剎車按一下就啟動了,至于按鍵背后做的事情,我們無需知道,只有這樣才可以大范圍推廣。

          同理,Starter也是這樣一個東西,只要引入之后,并在application.yml文件中進行一些簡單的配置或根本無須配置,直接啟動后就可以用了。

          Starter其實就是一個jar包,在pom中引入一個starter其實就是引入了一個jar包。

          而且很多時候,這個starter對應的jar包是個空的,里面并沒有任何類和接口。


          那這個空的jar包有何意義呢?它的意義就在于為了引入有意義的其它jar包,因為這些jar包都是基于Maven的,因此jar包的pom文件中包含了其它依賴。



          我們可以看到這個MyBatis的Starter就引入了正好需要的四類jar包:

          1、Spring或SpringBoot相關的jar包

          2、MyBatis的jar包

          3、MyBatis和Spring整合的jar包

          4、自動配置(也就是自動注冊Bean)的jar包

          這樣一來,要完成MyBatis和Spring整合的所有jar包都湊齊了。而且自動注冊Bean這些模板代碼也已經(jīng)有了。

          這里面也就自動配置jar包稍微特殊一點,它里面包含一些帶有“條件注解”的Bean注冊。所以這些代碼需要在SpringBoot中運行。

          由于很多自動配置jar包都是第三方提供的,所以一定要告訴SpringBoot一聲,讓SpringBoot來執(zhí)行它,這樣才可以。

          就像一鍵啟動按鈕一樣,你至少要按一下吧,不能通過意念控制的。

          下面是MyBatis的自動配置jar包:


          這個jar包里包含了一個特殊約定的文件,就是spring.factories,它位于jar包里的META-INF目錄下:


          這個文件的內(nèi)容如下:


          首先注釋已經(jīng)告訴我們了,這是自動配置。

          具體內(nèi)容是一個key/value類型的內(nèi)容,key是固定的,就是SpringBoot自動配置的注解EnableAutoConfiguration的全名。

          value就是第三方提供的自動配置類MybatisAutoConfiguration的全名。

          這其實就是一個掛接,通過這種方式,第三方提供的自動配置就可以被SpringBoot執(zhí)行了,然后Bean就會被注冊了。

          總結一下:

          Starter使用Maven規(guī)則引入所有需要的依賴jar包,和自動配置jar包。

          自動配置jar包使用spring.factories文件把自己掛接到SpringBoot以便被執(zhí)行。

          帶來的簡便:

          原來所有的問題,現(xiàn)在都變?yōu)閮H僅在pom中引入一個starter而已。


          各類知識點總結

          下面的文章都有對應的原創(chuàng)精美PDF,在持續(xù)更新中,可以來找我催更~

          掃碼或者微信搜Java3y?免費領取原創(chuàng)思維導圖、精美PDF。在公眾號回復「888」領取,PDF內(nèi)容純手打有任何不懂歡迎來問我。


          原創(chuàng)電子書

          原創(chuàng)思維導圖


          我是三歪,一個想要變強的男人,感謝大家的點贊收藏和轉(zhuǎn)發(fā),下期見。
          瀏覽 63
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费看黄 片,在线观看 | 色婷婷小视频 | 成人视频网 | 国产成人三级在线视频 | 特级WWW444至码 |