<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工作原理介紹

          共 2316字,需瀏覽 5分鐘

           ·

          2020-06-29 23:50


          本文是應一位讀者的要求而撰寫。先告訴大家,這個原理很好理解。


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


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

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

          從我們碼農來講,正常開發(fā)所需要的都是生產資料,這里有一塊很重要的資料,就是所有依賴的第三方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包:

          89109005a0d83b2591155d28e761f21d.webp


          引入MyBatis的jar包:

          e2799fa7b0ac4e8b2586c19dfacd4d3b.webp


          引入整合的jar包:

          d7507ddea9ff93839269b1133036c3fb.webp


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

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

          712f4271476acd06d85e55b2339e9f67.webp


          主要包括四方面內容:

          1、注冊SqlSessionFactory這個Bean

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

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

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

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

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

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


          SpringBoot幫你解決


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

          5579261f4321d8fd370bf4402a7594f6.webp


          da2732cd13caede7dcefcb7b7af5a32e.webp


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

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

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


          Starter就是一個啟用入口


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

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

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

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

          0c80e6719e1755354b3ae6f3eeeea020.webp


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

          bd2c5b00e5ffbb5cff1ef3d6c5f67d4e.webp


          3ee20ea43be363537b39b3b63b734adc.webp


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

          1、Spring或SpringBoot相關的jar包

          2、MyBatis的jar包

          3、MyBatis和Spring整合的jar包

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

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

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

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

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

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

          c957fede6179792e8315d6bcc838e9c3.webp


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

          7044d6d1ad319624c7c03293ec2b095a.webp

          這個文件的內容如下:

          2894725cb824b37b8f2e8b6d9beb6841.webp


          首先注釋已經告訴我們了,這是自動配置。

          具體內容是一個key/value類型的內容,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而已。


          —?【 THE END 】—本公眾號全部博文已整理成一個目錄,請在公眾號里回復「m」獲取!

          臥槽,又來一個Windows神器!!!


          274c97bc4206b2620962b176a4cc58ca.webp

          震驚!ConcurrentHashMap里面也有死循環(huán),作者留下的“彩蛋”了解一下?


          26472e6660e6951dc7936cf3ce509354.webp

          985 大學老師的工資并沒有很高,為什么大家都擠破頭想進高校?


          3T技術資源大放送!包括但不限于:Java、C/C++,Linux,Python,大數(shù)據,人工智能等等。在公眾號內回復「1024」,即可免費獲取!!




          瀏覽 115
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  天天日夜夜操B | 8050午夜二级 | 翔田千里 无码 播放 | 三级性视频 | 夜夜骑天天撸 |