詳解SpringBoot中自定義starter的開發(fā)與使用
開發(fā)公司業(yè)務(wù)時,如何去封裝公共通用的代碼,常見的選擇是工具類之類,但是如果我們又需要在其他項目中使用呢?工具類復制一份過去?還有就是定義成單獨的模塊,也很好,但其實有個更好的選擇是使用自定義starter,自定義的starter在使用起來會非常方便,這篇文章主要講講如何自定義starter,大家可以基于此去封裝公司中的一些公共代碼。
介紹 starter
starter是SpringBoot中非常重要的一個機制,他是基于約定優(yōu)于配置的思想所衍生出來的,摒棄了以前像Spring中需要使用一個依賴,需要添加非常多的配置,starter會在引入依賴時自動掃描需要加載的默認模塊及配置,發(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中定義一個默認的,也可以通過在引入這個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在進行打包

或者通過在命令行中執(zhí)行mvn clear install來進行打包,打包后會把這個依賴包安裝到我們本地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中定義的默認值。
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)置分詞器使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11
java 實現(xiàn)websocket的兩種方式實例詳解
這篇文章主要介紹了java 實現(xiàn)websocket的兩種方式實例詳解,一種使用tomcat的websocket實現(xiàn),一種使用spring的websocket,本文通過代碼給大家介紹的非常詳細,需要的朋友可以參考下2018-07-07
Java Servlet簡單實例分享(文件上傳下載demo)
下面小編就為大家?guī)硪黄狫ava Servlet簡單實例分享(文件上傳下載demo)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05
Java數(shù)據(jù)結(jié)構(gòu)之插入排序與希爾排序
在本篇文章,我們將為小伙伴們進行排序概念的基本講解并具體講解其中的兩種基礎(chǔ)排序:插入排序和希爾排序,希望小伙伴們能夠從中有所收獲2023-04-04

