案例講解SpringBoot?Starter的使用教程
一、Starter的簡介
1.什么是SpringBoot Starter
SpringBoot中的starter是一種非常重要的機制(自動化配置),能夠拋棄以前繁雜的配置,將其統(tǒng)一集成進starter,應用者只需要在maven中引入starter依賴,SpringBoot就能自動掃描到要加載的信息并啟動相應的默認配置。starter讓我們擺脫了各種依賴庫的處理,需要配置各種信息的困擾。
SpringBoot會自動通過classpath路徑下的類發(fā)現(xiàn)需要的Bean,并注冊進IOC容器。SpringBoot提供了針對日常企業(yè)應用研發(fā)各種場景的spring-boot-starter依賴模塊。
所有這些依賴模塊都遵循著約定成俗的默認配置,并允許我們調(diào)整這些配置,即遵循“約定大于配置”的理念。
2.怎么使用SpringBoot Starter
在我們的日常開發(fā)工作中,經(jīng)常會有一些獨立于業(yè)務之外的配置模塊,我們經(jīng)常將其放到一個特定的包下,然后如果另一個工程需要復用這塊功能的時候,需要將代碼硬拷貝到另一個工程,重新集成一遍,麻煩至極。如果我們將這些可獨立于業(yè)務代碼之外的功能配置模塊封裝成一個個starter,復用的時候只需要將其在pom中引用依賴即可, SpringBoot為我們完成自動裝配,簡直不要太爽。
3.應用場景
在我們的日常開發(fā)工作中,可能會需要開發(fā)一個通用模塊,以供其它工程復用。SpringBoot就為我們提供這樣的功能機制,我們可以把我們的通用模塊封裝成一個個starter,這樣其它工程復用的時候只需要在pom中引用依賴即可,由SpringBoot為我們完成自動裝配。
常見應用場景如下:
1)通用模塊-短信發(fā)送模塊
2)基于AOP技術實現(xiàn)日志切面
3)分布式雪花ID,Long轉(zhuǎn)String,解決精度問題
4)微服務項目的數(shù)據(jù)庫連接池配置
5)微服務項目的每個模塊都要訪問redis數(shù)據(jù)庫,每個模塊都要配置redisTemplate
4.自動加載核心注解說明

二、案例講解
下面我用案例的方式教會大家如何使用starter啟動器。
1.短信發(fā)送模塊
1.1.搭建SpringBoot環(huán)境
首先我們搭建一個SpringBoot項目,需要注意的是以下圖片內(nèi)容,有關后期導入依賴

導入一個注解處理器,用于處理 Spring Boot 配置類的注解,并生成配置屬性的元數(shù)據(jù)。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>開發(fā)過程中起到以下幾個重要的作用:
- 生成配置屬性的元數(shù)據(jù): 當你使用 @ConfigurationProperties 注解來聲明配置類時,spring-boot-configuration-processor 會解析該注解,并生成與配置屬性相關的元數(shù)據(jù)。這些元數(shù)據(jù)包括屬性的名稱、類型、描述、默認值等信息。這些信息可以幫助 IDE 在開發(fā)過程中提供代碼提示、自動補全和驗證功能。
- 提供配置屬性的編譯時驗證: 使用 @ConfigurationProperties 注解時,你可以使用其他注解(如 @Value、@Valid 等)來描述配置屬性的約束條件。spring-boot-configuration-processor 可以處理這些注解,并在編譯時進行驗證。這樣,你可以在開發(fā)階段及早發(fā)現(xiàn)配置屬性的錯誤或不一致,而不是在運行時才遇到問題。
- 簡化配置類的編寫: 通過使用 spring-boot-configuration-processor,你可以更輕松地編寫配置類。它會自動處理 @ConfigurationProperties 注解及其相關注解,生成屬性的 getter、setter 方法,并提供默認的配置文件映射規(guī)則。這樣,你可以專注于定義配置屬性的結(jié)構(gòu)和業(yè)務邏輯,而不需要手動編寫重復的代碼。
- 提升開發(fā)體驗: spring-boot-configuration-processor 增強了開發(fā)工具的功能,例如在 IDE 中提供配置屬性的智能提示、文檔、類型檢查等功能。這可以減少開發(fā)過程中的錯誤,并提高代碼的可讀性和可維護性。
在這之前需要知道以下我們啟動器與springboot官方提供的依賴有什么關系
SpringBoot官方命名方式:
spring-boot-starter-{模塊名}例如:spring-boot-starter-web
自定義命名方式:
{模塊名}-spring-boot-starter例如:mystarter-spring-boot-starter
1.2.創(chuàng)建配置類Properties
/**
* 短信服務配置類
*/
@Data
@ConfigurationProperties(prefix = "sms")
public class SmsProperties {
private String key;//訪問ID、即帳號
private String secret;//訪問憑證,即密鑰
private String enabled;//用于操作是否啟用該模塊
}提供該配置類的set\get方法并且將配置文件中以sms為前綴的屬性值綁定到該類對應的屬性上。
1.3.編寫短信業(yè)務功能
ISmsService代碼
public interface ISmsService {
/**
* 發(fā)送短信
*
* @param phone 要發(fā)送的手機號
* @param data 要發(fā)送的內(nèi)容
*/
void send(String phone, String data);
}SmsServiceImpl代碼
public class SmsServiceImpl implements ISmsService {
private SmsProperties smsProperties ;
public SmsServiceImpl(SmsProperties smsProperties) {
this.smsProperties=smsProperties;
}
@Override
public void send(String phone, String data) {
String key = smsProperties.getKey();
String secret = smsProperties.getSecret();
System.out.println("接入短信系統(tǒng),Key=" + key + ",Secret=" + secret);
System.out.println("短信發(fā)送,phone=" + phone + "data=" + data);
}
}1.4.創(chuàng)建自動配置類
@Configuration
@EnableConfigurationProperties({SmsProperties.class})
@ConditionalOnProperty(prefix = "sms",name = "enable",havingValue = "true")
public class SmsConfig {
@Autowired
private SmsProperties smsProperties;
//通過@Bean注解將其注入到Spring上下文中
@Bean
public ISmsService smsService(){
//調(diào)用SMS短信服務接口時,必須通過賬號和密碼的方式進行調(diào)用。
return new SmsServiceImpl(smsProperties);
}
}該類的作用是將這個類交與spring管理的同時也把SmsProperties這個類交給spring管理,并且將這個配置類放入spring容器讓其他類可以獲取到,這里還有個條件就是如果我sms.enable的值不為true,那么就都不會加入到spring中。
注釋小課堂:
@Configuration注解:用于定義該類是一個配置類,相當于傳統(tǒng)Spring XML配置文件中的<beans>標簽,表示其中包含有一個或多個@Bean注解的方法,用于構(gòu)建bean對象并放入Spring容器中管理。
@EnableConfigurationProperties({SmsProperties.class})注解:用于啟用指定類型的配置屬性(Configuration Properties)。在這里,它啟用了SmsProperties類作為配置屬性類,使得可以在SmsConfig類中通過@Autowired注解自動注入SmsProperties對象。
@Bean注解:用于定義一個bean,并將其注入到Spring上下文中。在這個例子中,smsService方法返回的SmsServiceImpl對象會被納入到Spring容器的管理范圍內(nèi)。
@ConditionalOnProperty(prefix = "sms", name = "enable", havingValue = "true")注解的作用是根據(jù)配置文件中的屬性值來條件性地加載或禁用Bean。
具體而言,它基于以下三個條件進行判斷:
prefix:指定屬性的前綴,即在配置文件中以什么前綴開始的屬性。
name:指定屬性的名稱,即需要判斷的屬性的具體名稱。
havingValue:指定屬性的期望值,當該屬性的值與havingValue指定的值相等時,才滿足條件。
1.5.測試代碼
我們在application.properties配置一下SmsProperties
sms:
sms.key=j7fj8eoji92d
sms.secret=8u8u8u在測試類調(diào)用一下SmsServiceImpl的send方法
@SpringBootTest
class SmsApplicationTests {
@Autowired
private SmsProperties smsProperties ;
@Test
void contextLoads() {
new SmsServiceImpl(smsProperties).send("110", "愛你");
}
}控制臺輸出結(jié)果

因為我們的自動裝配類,啟動的spring就會將本身以及配置類注入到spring中,而配置類又與配置文件也就是application.properties做了匹配,只要配置文件中填了sms.key和sms.secret就會將填寫的內(nèi)容注入到配置類中。
1.6.其他模塊導入短信模塊
①首先需要編寫spring.factories文件加載自動配置類
在resources下新建META-INF文件夾,然后創(chuàng)建spring.factories文件;

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.csdn.sms.Properties.SmsConfig
②打包安裝
直接install即可

在本地倉庫就會有你剛剛所打包的依賴

注意:打包的時候請注釋application.properties,否則這里的配置就定死了,不會隨著我們調(diào)用者的配置而改動?。?!
③引用并測試
引入依賴
<dependency>
<groupId>com.csdn</groupId>
<artifactId>sms</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>配置application.yml

如果enable不為true,那么就不會注入javabean就會報錯

測試模塊功能
@SpringBootTest
class BootApplicationTests {
@Autowired
private SmsProperties smsProperties;
@Test
void contextLoads() {
new SmsServiceImpl(smsProperties).send("15574117565","其他模塊");
}
}
看到這里我們的starter的短信模塊就完成了
2.基于AOP技術的Log日志模塊
我現(xiàn)有一個基于AOP的Log日志功能,這個切面定義了一個切入點webLog(),它匹配所有以Controller結(jié)尾的類的所有方法。在這些方法執(zhí)行之前和之后,分別執(zhí)行了doBefore()和doAfterReturning()方法,這兩個方法中包含了對請求信息的記錄和處理。
@Component
@Slf4j
@Aspect
public class WebLogAspect {
@Pointcut("execution(public * com.zking..controller.*.*(..))")
@Pointcut("execution(* *..*Controller.*(..))")
public void webLog(){}
@Before("webLog()")
public void doBefore(JoinPoint joinPoint) throws Throwable {
// 接收到請求,記錄請求內(nèi)容
ServletRequestAttributes attributes = (ServletRequestAttributes)
RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
// 記錄下請求內(nèi)容
log.info("開始服務:{}", request.getRequestURL().toString());
log.info("客戶端IP :{}" , request.getRemoteAddr());
log.info("參數(shù)值 :{}", Arrays.toString(joinPoint.getArgs()));
}
@AfterReturning(returning = "ret", pointcut = "webLog()")
public void doAfterReturning(Object ret) throws Throwable {
// 處理完請求,返回內(nèi)容
log.info("返回值 : {}" , ret);
}
}我現(xiàn)在要用剛剛的短信發(fā)送模塊中的方式,通過yml配置enable的屬性來控制是否開啟日志模塊
2.1.創(chuàng)建配置類Properties
@Data
@ConfigurationProperties(prefix = "weblog")
public class WebLogProperties {
private String enable;//控制是否開啟切面
}2.2.編寫自動配置類
@Configuration
@EnableConfigurationProperties({WebLogProperties.class})
@ConditionalOnProperty(prefix = "weblog", value="enable",havingValue = "true")
public class WebLogAutoConfig {
@Bean
@ConditionalOnMissingBean
public WebLogAspect webLogAspect(){
return new WebLogAspect();
}
}或者直接在切面類上加上注解
@ConditionalOnProperty(prefix = "weblog", value="enable",havingValue = "true")
當我們配置weblog.enable等于true的時候才會開啟Log日志管理,下面演示一下

到此這篇關于案例講解SpringBoot Starter的使用教程的文章就介紹到這了,更多相關SpringBoot Starter使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot結(jié)合Vue實現(xiàn)Python在線調(diào)試器
這篇文章主要為大家詳細介紹了SpringBoot如何結(jié)合Vue實現(xiàn)Python在線調(diào)試器,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2026-01-01
在Java中將jsonObject轉(zhuǎn)換成對象的實現(xiàn)方法
在現(xiàn)代的Web開發(fā)中,JSON作為一種輕量級的數(shù)據(jù)交換格式,因其易讀性和易于解析的特點而被廣泛使用,本文將介紹如何在Java中將??jsonObject??轉(zhuǎn)換成Java對象,主要通過使用Gson庫來實現(xiàn)這一功能,需要的朋友可以參考下2025-04-04
springboot接入netty實現(xiàn)在線統(tǒng)計人數(shù)
本文主要介紹了springboot接入netty實現(xiàn)在線統(tǒng)計人數(shù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2025-03-03

