詳解SpringBoot中自定義starter的開發(fā)與使用
開發(fā)公司業(yè)務(wù)時,如何去封裝公共通用的代碼,常見的選擇是工具類之類,但是如果我們又需要在其他項目中使用呢?工具類復(fù)制一份過去?還有就是定義成單獨的模塊,也很好,但其實有個更好的選擇是使用自定義starter
,自定義的starter
在使用起來會非常方便,這篇文章主要講講如何自定義starter
,大家可以基于此去封裝公司中的一些公共代碼。
介紹 starter
starter
是SpringBoot
中非常重要的一個機制,他是基于約定優(yōu)于配置
的思想所衍生出來的,摒棄了以前像Spring
中需要使用一個依賴,需要添加非常多的配置,starter
會在引入依賴時自動掃描需要加載的默認(rèn)模塊及配置,發(fā)現(xiàn)我們所定義的Bean
并自動注冊到IOC
容器中。
一、創(chuàng)建 SpringBoot 項目并引入依賴
命名規(guī)范
SpringBoot
官方的starter
命名規(guī)范為:spring-boot-starter-{name}
- 自定義
starter
命名規(guī)范為:{name}-spring-boot-starter
首先通過IDEA
創(chuàng)建一個SpringBoot
項目。
這里我通過一個簡單的日志功能來實現(xiàn)自定義starter
功能,創(chuàng)建一個mylog-spring-boot-starter
項目。對應(yīng)的pom
文件:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.15</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.jk</groupId> <artifactId>mylog-spring-boot-starter</artifactId> <version>0.0.1-SNAPSHOT</version> <name>mylog-spring-boot-starter</name> <description>mylog-spring-boot-starter</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.28</version> </dependency> </dependencies> </project>
引入的依賴:
spring-boot-autoconfigure:
這個依賴是實現(xiàn)自動配置的核心依賴,它會根據(jù)定義的META-INF/spring.factories
里面定義的類全路徑去找到這個類,然后根據(jù)@Bean
注解所描述的方法注冊Bean
到IOC
容器中。spring-boot-configuration-processor:
這個依賴是為了實現(xiàn)在application.yml
中定義配置時的提示功能。lombok:
實現(xiàn)類中自動補全getter
、setter
、構(gòu)造器
等方法。
二、定義核心的 Service
這個service
即在業(yè)務(wù)項目引入這個starter
時可以自動裝配的類。
service.MyLogService:
import lombok.Data; @Data public class MyLogService { private String prefix; private String suffix; public void print(String log) { System.out.println(prefix + " " + log + " " + suffix); } }
定義了一個print
方法,實現(xiàn)日志的打印,日志的前綴和后綴我們會在后面的Properties
中定義一個默認(rèn)的,也可以通過在引入這個starter
的業(yè)務(wù)模塊中通過配置文件修改。
三、定義 Properties
定義Properties
類來實現(xiàn)JavaConfig
功能,把application.yml
或application.properties
中的配置讀取映射到Java
類上。
config.MyLogProperties:
import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; @Data @ConfigurationProperties(prefix = "mylog") public class MyLogProperties { private String prefix = "myPrefix"; private String suffix = "mySuffix"; }
@Data:
通過這個lombok
的注解實現(xiàn)類的setter
、getter
、構(gòu)造器
方法的自動補全。@ConfigurationProperties:
通過這個注解實現(xiàn)類與配置文件的綁定和值的注入,通過prefix
可以定義在配置文件中的統(tǒng)一前綴。比如配置文件中mylog.prefix
的值就會綁定到類中prefix
屬性上。
四、定義 AutoConfiguration
定義AutoConfiguration
類,引入starter
時,會自動配置的類,它會自動注冊里面的@Bean
到spring
中IOC容器中。
config.MyLogAutoConfiguration:
import com.jk.mylogspringbootstarter.service.MyLogService; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration @EnableConfigurationProperties(MyLogProperties.class) public class MyLogAutoConfiguration { @Bean public MyLogService demoModule(MyLogProperties properties) { MyLogService myLogService = new MyLogService(); myLogService.setPrefix(properties.getPrefix()); myLogService.setSuffix(properties.getSuffix()); return myLogService; } }
@Configuration:
表明這是SpringBoot
中的配置類。@EnableConfigurationProperties:
使我們之前定義的Properties
生效。@Bean:
引入starter
時自動注冊的Bean
。
五、定義 spring.factory
在resources
中創(chuàng)建META-INF
目錄并創(chuàng)建spring.factories
文件。寫入以下內(nèi)容:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.jk.mylogspringbootstarter.config.MyLogAutoConfiguration
上面這行內(nèi)容固定,表示自動配置的類路徑,下面需寫我們之前定義的AutoConfiguration
的全路徑。
到此我們自定義starter
源代碼部分就完成了,整體的代碼結(jié)構(gòu)如下:
六、打包 starter,并在項目中測試
在IDEA
中通過maven install
在進(jìn)行打包
或者通過在命令行中執(zhí)行mvn clear install
來進(jìn)行打包,打包后會把這個依賴包安裝到我們本地maven
倉庫。
在業(yè)務(wù)項目中:
1. pom中引入對應(yīng)的starter
<dependency> <groupId>com.jk</groupId> <artifactId>mylog-spring-boot-starter</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
2. 自動裝配在starter中定義的MyLogService
3. 日志打印結(jié)果
可以看到日志的前綴和后綴為之前我們在Properties
中定義的默認(rèn)值。
4. 修改日志前綴、后綴配置
通過在業(yè)務(wù)項目中application.yml
修改前綴和后綴
測試打印結(jié)果如下:
到此這篇關(guān)于詳解SpringBoot中自定義starter的開發(fā)與使用的文章就介紹到這了,更多相關(guān)SpringBoot自定義starter內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Elasticsearch?Analyzer?內(nèi)置分詞器使用示例詳解
這篇文章主要為大家介紹了Elasticsearch?Analyzer?內(nèi)置分詞器使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11java 實現(xiàn)websocket的兩種方式實例詳解
這篇文章主要介紹了java 實現(xiàn)websocket的兩種方式實例詳解,一種使用tomcat的websocket實現(xiàn),一種使用spring的websocket,本文通過代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2018-07-07Java Servlet簡單實例分享(文件上傳下載demo)
下面小編就為大家?guī)硪黄狫ava Servlet簡單實例分享(文件上傳下載demo)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05Java數(shù)據(jù)結(jié)構(gòu)之插入排序與希爾排序
在本篇文章,我們將為小伙伴們進(jìn)行排序概念的基本講解并具體講解其中的兩種基礎(chǔ)排序:插入排序和希爾排序,希望小伙伴們能夠從中有所收獲2023-04-04