網站首頁 編程語言 正文
目錄
一、自己的理解
1. 理解一
2. 理解二
二、自定義starter(重點)
三、以mybatis-spring-boot-starter為例進行分析
1. 寫好自己的自動配置類邏輯
2. 創建自己的starter項目并引入自動配置類項目的依賴
3. 在其它項目中使用自定義的starter
一、自己的理解
1. 理解一
自定義Starter的常規流程:
(1)自定義一個項目,叫做 xxx-spring-boot-autoconfigure (比如mybatis-spring-boot-autoconfigure), 在這個項目里面寫自定義的配置類:xxxAutoConfiguration ---> xxxProperties,然后在項目的 META-INF/spring.factories文件中把自己的自動配置類配置進去(可以參照其它starter進行配置)從而使得項目啟動自動加載指定的自動配置類;
(2)自定義一個項目,artifactId叫做xxx-spring-boot-starter (比如mybatis-spring-boot-starter)
(3)在(2)中引入(1)的依賴【即starter的pom文件里面引入autoconfigure包】
(4)在其它項目中使用自定義的Starter,就是引入(2)的依賴,然后在自己的配置文件中配置需要和xxxProperties綁定的配置信息,這樣就可以在自己的項目中使用自定義的starter了。
2. 理解二
????????場景啟動器里面沒有源代碼,場景啟動器里面一般只負責在其pom文件里面聲明這個場景啟動器有哪些依賴,同時場景啟動器里面引入了當前場景的自動配置依賴,而在自動配置包里面要引入springboot最底層的,每一個模塊都要引入的spring-boot-starter,如下圖:
二、自定義starter(重點)
? ? ? ? 根據 <理解二>中的圖,自定義一個starter,其詳細步驟如下:
(1) 創建一個空工程,空工程里面可以容納多個項目,如下圖:
?(2)在新的空工程里面創建第一個模塊(場景啟動器starter模塊)
shg-hello-spring-boot-starter 如下圖:
(3)在新工程里面創建第二個模塊(自動配置模塊),如下圖:
?(4)場景啟動器(shg-hello-spring-boot-starter) 里面需要引入 自動配置模塊 (shg-hello-spring-boot-starter-autoconfigure),如下圖:
(5)<自動配置>這個項目不需要啟動,所以不需要主啟動類,也不需要配置文件,可以把多余的東西刪除,如下圖:
?
(6)一個業務場景是這樣的:比如有一個業務方法是<給別人打招呼>,其使用場景是你給我傳入一個姓名,我給你輸出一句問候語,并且這個問候語的格式是<可配置的前綴>+傳入的姓名+<可配置的后綴>。
????????這個業務方法經常被使用,被多個模塊使用,那么我就可以把這個業務方法抽取出來 。如下所示:
(7)在自動配置類的resource下創建?META-INF/spring.factories文件,在此文件中配置EnableAutoConfiguration 的值,這個值指定的就是需要在SpringBoot項目啟動時自動加載的配置類(當然這個配置類生效與否還要看其是否滿足自動配置類的條件),如下:
(8)打包項目并安裝到本地倉庫中
? ? ? ?因為場景啟動器要依賴自動配置包,所以要先打包自動配置包,再打包場景啟動器;如下圖:
?
?
?至此就成功開發了自己的場景啟動器,那么如何在其它項目中進行使用呢?接著看:
(8)新建一個測試項目,在其pom文件引入自定義的場景啟動器,如下:
(9)直接編寫業務方法,進行使用,如下:
?
(10)進行測試:
?
(11) 其它一些想法:
- 可以給HelloProperties的屬性給定一些默認值,當其它項目使用我們的場景啟動器(自定義starter時)如果沒有在配置文件進行配置值,就使用我們默認給定的值;
- 條件裝配(比如我們的自動配置類在給容器中添加組件時需要經過一些條件判斷,當滿足某種條件時才給容器中放入某個組件)
- ...?
三、以mybatis-spring-boot-starter為例進行分析
1. 寫好自己的自動配置類邏輯
說明:自動配置類里面需要的屬性信息和xxxProperties類進行綁定
(1)自定義一個項目,artifactId叫做 <mybatis-spring-boot-autoconfigure>,如下圖:
2. 創建自己的starter項目并引入自動配置類項目的依賴
(2)自定義一個項目,artifactId叫做xxx-spring-boot-starter (比如mybatis-spring-boot-starter)
(3)在(2)中引入(1)的依賴【即starter的pom文件里面引入autoconfigure包】,如下圖:
3. 在其它項目中使用自定義的starter
(4)在其它項目中使用自定義的Starter,就是引入(2)的依賴,然后在自己的配置文件中配置需要和xxxProperties綁定的配置信息,這樣就可以在自己的項目中使用自定義的starter了。?
?
原文鏈接:https://blog.csdn.net/qq_23388169/article/details/134768661
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-09-22 數據結構:順序表和鏈表學習小結
- 2022-05-26 為Jenkins創建定時構建任務_相關技巧
- 2022-01-17 什么是token token用在哪 token放在哪比較好
- 2023-04-26 C語言二維數組指針的概念及使用_C 語言
- 2023-04-11 Golang使用協程實現批量獲取數據_Golang
- 2022-10-05 Python實現單例模式的五種寫法總結_python
- 2023-01-11 Python?基于xml.etree.ElementTree實現XML對比示例詳解_python
- 2022-11-04 詳解linux命令查看服務器上的實時日志_服務器其它
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支