手寫自定義springboot-starter,感受框架的魅力和原理

一、前言Springboot的自動配置原理,面試中經常問到,一直看也記不?。?不如手寫一個starter,加深一下記憶 ??戳酥蟀l現大部分的starter都是這個原理,實踐才會記憶深刻 。核心思想:約定大于配置
二、初探starter啟動原理我們直接看看官網的starter是怎么設計的,仿照這寫一個就行了!
我們Ctrl點擊<artifactId>spring-boot-starter-web</artifactId>,進入內部pom,我們發現里面有個
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>2.5.3</version><scope>compile</scope></dependency>在此Ctrl點擊<artifactId>spring-boot-starter</artifactId>進入starter內部pom:我們發現之后干活的就是這個包依賴:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId><version>2.5.3</version><scope>compile</scope></dependency>

手寫自定義springboot-starter,感受框架的魅力和原理

文章插圖
我們現在創建兩個項目即可:
  • spring-boot-starter(啟動器)
  • spring-boot-starter-autoconfigure(自動配置包)
小編看到官方這么寫的提醒,大家可以按照官網的進行起名稱,不要學小編哈?。?
您應該確保為您的啟動器提供適當的命名空間 。不要以 . 開頭的模塊名稱spring-boot,即使您使用不同的 Maven groupId 。我們將來可能會為您自動配置的內容提供官方支持 。根據經驗,您應該在啟動器之后命名組合模塊 。例如,假設您正在為“acme”創建一個啟動器,并且您命名自動配置模塊acme-spring-boot和啟動器acme-spring-boot-starter 。如果您只有一個模塊將兩者結合起來,請將其命名為acme-spring-boot-starter.
三、項目搭建1. 新建空白項目
手寫自定義springboot-starter,感受框架的魅力和原理

文章插圖
輸入總的項目名稱
手寫自定義springboot-starter,感受框架的魅力和原理

文章插圖
在空白項目里新建兩個,這里可以分開單獨建立,這里小編跟著雷神一樣了,就不單獨建立項目了?。?
手寫自定義springboot-starter,感受框架的魅力和原理

文章插圖
2. 新建maven項目
手寫自定義springboot-starter,感受框架的魅力和原理

文章插圖
包名和名稱:
手寫自定義springboot-starter,感受框架的魅力和原理

文章插圖
3. 新建springboot項目
手寫自定義springboot-starter,感受框架的魅力和原理

文章插圖
4. 項目架構這里把沒有用的都刪除了??!可覉A簧?
手寫自定義springboot-starter,感受框架的魅力和原理

文章插圖
四、配置1. 在starter項目中引入自己的autoconfigure依賴就是上面建立項目的設置的
<dependencies><dependency><groupId>com.wang</groupId><artifactId>spring-boot-autoconfigure</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies>
手寫自定義springboot-starter,感受框架的魅力和原理

文章插圖
2. spring-boot-autoconfigure pom配置<properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.3.7.RELEASE</spring-boot.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>${spring-boot.version}</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency></dependencies>還是把沒用的東西刪除了 , 剩余如下圖:
手寫自定義springboot-starter,感受框架的魅力和原理

文章插圖
五、編寫autoconfigure項目1. 配置一個bean首先刪除了自動啟動類 , 咱們用不到,在spring-boot-autoconfigure項目中新建一個bean,此時不需要讓這個bean在容器中,我們寫一個自己配置 , 讓他自動加入到容器中 。這就是自動配置的思想
/** * 這里不需要讓在容器中,我們寫一個自己配置,讓他自動加入到容器中 * @author wangzhenjun * @date 2022/10/14 16:26 */public class HelloService {@Autowiredprivate MyProperties myProperties;public String HelloWord (String username){return myProperties.getPrefix() + username + myProperties.getSuffix();}}

推薦閱讀