springBoot 自動配置原理--本身新建一個 starter

上篇咱們說到 springboot 和 SSM 框架的區別,今天咱們就看看 springboot 到底爲咱們作了哪些事情,讓咱們開發變得如此簡單。html

springboot 中起着重要做用的是 starter,starter 主要有兩個做用:mysql

1.引入相關的 jar 包spring

2.自動完成 bean 的配置sql

當咱們建立 springboot 項目時選擇 mybatis,mysql 組件,能夠看到 pom 文件幫咱們加入了對應的 starter。數據庫

 可別小看這些 starter,正是它們幫咱們引入了相關的 jar 包,雖然項目裏只有這幾個依賴,但能夠看到 maven 已經幫咱們下載了這麼多 jar 包json

 

咱們知道,雖然建立 ssm 項目的步驟很繁瑣,卻都是必不可少的,咱們就以 mybatis starter 爲例,一步一步來看 springboot 是如何幫咱們完成這些配置的。springboot

1,springboot 經過條件依賴註解解決了 bean 之間的衝突mybatis

以下圖所示,咱們看到 ConditionalOnClass ,ConditionalOnSingleCandidate  指明瞭這個 bean 依賴括號裏的 bean 存在,就意味着先有括號裏的 bean,纔去實例化咱們須要的這個 bean,利用這個功能,bean 之間的依賴順序獲得了很好的解決,這些是 springboot 新加的功能app

 

 2,bean 須要的參數能夠在 yml / properties文件裏配置框架

 

上圖咱們能夠看到,在 application.properties 文件中配置了數據庫鏈接地址,登陸名,密碼,以及 mybatis 的一些參數,但這些參數是怎麼被讀取的呢 ?

 在 MybatisAutoConfiguration.class 文件中,有這麼一個註解

咱們接下來看一看 MybatisProperties.class 裏面有什麼

有沒有發現,這裏面的屬性,就是咱們在 yml/properties 裏配置的一些參數,因此下次想知道 mybatis 能夠配置什麼參數,咱們就能夠進這個文件裏看看有哪些屬性了

固然你確定發現,咱們在 yml/properties 配置參數時,編譯器會幫咱們自動補全,這個主要是掃描一個 json 文件

3,bean 配置經過 spring.factories 文件加載

當咱們啓動項目時,會掃描 jar 包 META-INF 文件夾下的 spring.factories 文件,就會去加載對應的配置文件

 

starter 幫咱們作了這部份內容,咱們就能夠考慮,把一些通用的組件,製成一個屬於咱們本身的 starter

1.首先咱們要再重申一下 starter 的兩個重要做用

  a. 引入相關的 jar;

  b. 自動配置;

2. starter 的命名規範

  a. spring 提供的 starter:

    spring-boot-starter-XXX-x.y.z.jar

    spring-boot-XXX-autoconfigure-x.y.z.jar

  b. 第三方提供的 jar

    XXX-spring-boot-starter-x.y.z.jar

    XXX-spring-boot-autoconfigure-x.y.z.jar

3. 本身製做第三方 starter 的步驟

  a.準備第三方的 jar

    新建一個 maven 工程,寫好須要的功能,執行 maven install,打成 jar 包

  b.製做 starter

    (1)新建一個 springboot 工程,引入剛打成的 jar 包,爲了生成配置元信息,引入一個依賴

      <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-configuration-processor</artifactId>
      </dependency>        

    (2)編寫自動配置類

 

這是我寫的一個簡單的配置類,CommonProperties 文件是咱們須要的參數,以下圖所示,咱們想配置這些參數時,就在 yml/properties 文件中以 com.common 開頭便可

    (3)在 resource 下新建 META-INF 文件夾,在該文件夾下建 spring.properties 文件,肯定spring要加載,啓用這個配置

 

這樣,啓動項目時,就會加載編寫的配置類,生成須要的 bean。
把這個項目打成 jar 包,咱們的第一個 starter 就作好了,在本身項目中引入咱們作好的 jar 包,就能夠開始使用啦,是否是很簡單,springboot 使用 starter 簡化了咱們的配置,還讓咱們能夠本身製做 starter,把本身經常使用的一些功能製成能夠通用的 jar 包,實在爲咱們的開發提供了很大的便利,咱們不只要會使用它,還要明白裏面的原理,這樣面對問題時,才能很快找到問題所在。


這篇文章真的拖了很久才寫完,接下來再接再礪,共同進步!

原文出處:https://www.cnblogs.com/fightingting/p/10630936.html

相關文章
相關標籤/搜索