Springboot 開發 -- 創建Spring Boot Starter

一、簡介

Spring Boot Starter是Spring Boot生態中非常重要的一部分,它允許開發者通過簡單的依賴管理來快速集成各種功能和庫。在開發過程中,我們經常會遇到一些通用的功能或配置,如果每次都需要手動添加這些配置和依賴,那么將會非常繁瑣。因此,創建一個自定義的Spring Boot Starter可以極大地提高開發效率。本文將詳細介紹如何創建自己的Spring Boot Starter,并為其編寫單元測試。

二、創建Spring Boot Starter

1. 初始化項目

使用Spring Initialize(https://start.spring.io/)或Maven/Gradle手動創建一個新的Spring Boot項目,并選擇需要的依賴(通常不需要選擇太多,因為我們只是創建一個starter)。

<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>
</dependencies>

2. 定義自動配置

在src/main/java目錄下,創建一個新的包(例如com.example.mystarter.autoconfigure),并在其中添加自動配置類。這個類需要使用@Configuration和@EnableAutoConfiguration注解,并可能需要定義一些@Bean方法。

package com.example.mystarter.autoconfigure;  import org.springframework.boot.autoconfigure.EnableAutoConfiguration;  
import org.springframework.context.annotation.Configuration;  
import org.springframework.context.annotation.Bean;  @Configuration  
@EnableAutoConfiguration  
public class MyStarterAutoConfiguration {  @Bean  public MyService myService() {  return new MyServiceImpl();  }  
}

3.創建spring.factories文件(Spring Boot 2.7 以下)

在src/main/resources/META-INF目錄下創建spring.factories文件,并在org.springframework.boot.autoconfigure.EnableAutoConfiguration關鍵字下列出您的自動配置類,比如:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.mystarter.autoconfigure.MyStarterAutoConfiguration 

該配置的作用是讓Spring Boot應用在引入您自定義Starter的時候可以自動這里的配置類。

4. Spring Boot 2.7 新特性

Spring Boot 2.7開始,不再推薦使用spring.factories,而是創建新的文件:

 /META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

文件內容直接放需要自動加載配置類路徑即可,比如這樣:

com.example.mystarter.autoconfigure.MyStarterAutoConfiguration 

注意:這里多了一級spring目錄。

三、驗證測試

在制作Spring Boot Starter的時候,一定記得使用單元測試來驗證和確保自動化配置類在任何條件邏輯在啟動器下能夠按照正確的預期運行。

1. 添加測試依賴

在pom.xml或build.gradle文件中添加測試相關的依賴,例如Spring Boot Test、JUnit等。

		<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>

2. 創建單元測試

使用@SpringBootTest加載完整的應用程序上下文,并驗證啟動程序是否正確配置了 Bean 和屬性。

package com.example.mystarter;  import com.example.mystarter.autoconfigure.MyStarterAutoConfiguration;  
import com.example.mystarter.service.MyService;  
import org.junit.jupiter.api.Test;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.boot.test.context.SpringBootTest;  import static org.junit.jupiter.api.Assertions.assertNotNull;  @SpringBootTest(classes = MyStarterAutoConfiguration.class)  
public class MyStarterAutoConfigurationTest {  @Autowired  private MyService myService;  @Test  public void testMyService() {  assertNotNull(myService, "MyService should not be null");  // 這里可以添加更多的測試邏輯  }  
}

參考:
https://segmentfault.com/a/1190000020121457

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/14790.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/14790.shtml
英文地址,請注明出處:http://en.pswp.cn/web/14790.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網絡采集受限?如何解決指紋識別、IP封禁、驗證碼、賬號多登等問題

網頁采集是什么 網頁采集&#xff0c;也常被稱作網絡采集、網絡數據抓取&#xff0c;是一種通過自動化工具從網站上獲取信息的技術。這些技術通過訪問網頁&#xff0c;解析頁面上的內容&#xff0c;并提取出有價值的數據&#xff0c;如文本、圖片、鏈接等。 網頁采集通常用于…

Leedcode34. 在排序數組中查找元素的第一個和最后一個位置_Java解法

Problem: 34. 在排序數組中查找元素的第一個和最后一個位置 題目描述思路解題方法復雜度Code 題目描述 34. 在排序數組中查找元素的第一個和最后一個位置 力扣鏈接 給定一個按照升序排列的整數數組 nums&#xff0c;和一個目標值 target。找出給定目標值在數組中的開始位置…

Python 調整PDF文件的頁面大小

在處理PDF文件時&#xff0c;我們可能會遇到這樣的情況&#xff1a;原始PDF文檔不符合我們的閱讀習慣&#xff0c;或者需要適配不同顯示設備等。這時&#xff0c;我們就需要及時調整PDF文檔中的頁面尺寸&#xff0c;以滿足不同應用場景的需求。 利用Python語言的高效性和靈活性…

Linux--網絡通信(一)概述

網絡通信概述 網絡通信本質上是一種進程間通信&#xff0c;是位于網絡中不同主機上的進程之間的通信&#xff0c;屬于 IPC 的一種&#xff0c; 通常稱為 socket IPC。所以網絡通信是為了解決在網絡環境中&#xff0c;不同主機上的應用程序之間的通信問題。 大概可以分為三個層…

優化關聯查詢

三個表的創建語句 CREATE TABLE test.afx_output_source_item (cheadguid INT NOT NULL,goodsid INT NULL,goodsno VARCHAR(45) NULL,goodsname VARCHAR(45) NULL,model VARCHAR(45) NULL,goodstaxno VARCHAR(45) NULL,PRIMARY KEY (cheadguid));CREATE TABLE test.afx_output…

23種設計模式之一————外觀模式詳細介紹與講解

外觀模式詳細講解 一、概念二、 外觀模式結構核心思想及解釋模式的UML類圖模式角色應用場景模式優點模式缺點 三、實例演示圖示代碼展示運行結果 一、概念 外觀模式&#xff08;Facade Pattern&#xff09;是一種結構型設計模式&#xff0c;它提供了一個統一的接口&#xff0c…

【問題解決】Android Studio Jellyfish新建Kotlin項目后Gradle Sync及Maven下載很慢

創建新項目之后&#xff0c;Gradle Sync和Build都很慢&#xff0c;因為下載Gradle和Maven等工具。 代碼默認配置 settings.gradle.kts pluginManagement {repositories {google {content {includeGroupByRegex("com\\.android.*")includeGroupByRegex("com\\.g…

ASSM是Automatic Segment Space Management(自動段空間管理)解析

ASSM是Automatic Segment Space Management&#xff08;自動段空間管理&#xff09;的縮寫&#xff0c;是Oracle數據庫引入的一項重要特性&#xff0c;首次出現在Oracle 9i中。ASSM旨在簡化空間管理和提高數據庫性能&#xff0c;特別是對于表和索引段的空間分配和回收過程。 在…

Android Activity 設計詳解

文章目錄 Android Activity 設計說明1. Activity 的生命周期2. Activity 的啟動模式3. Activity 的通信4. Activity 的布局和視圖管理5. Activity 的配置變化處理6. Activity 的保存和恢復狀態7. Activity 的任務和返回棧 總結 Android Activity 設計說明 在 Android 中&#…

Ansible01-Ansible的概述、實驗環境初始化、Inventory

目錄 寫在前面1. Ansible是什么1.1 簡介與來歷1.2 Ansible的特點1.3Ansible的架構與工作流程1.3.1 ansible 任務執行模式1.3.2 ansible 執行流程1.4 Ansible的模塊 2. Ansible實驗初始化2.1 實驗環境2.2Ansible的安裝2.2.1 Ansible的程序結構 2.3 修改Ansible配置文件2.3.1 配置…

【408精華知識】頁、頁面、頁框、頁幀、內存塊、物理塊、物理頁面還傻傻分不清?

在做題過程中&#xff0c;我們經常能看到頁、頁框、塊等概念&#xff0c;初接觸時&#xff0c;常感覺傻傻分不清&#xff0c;這篇文章將簡潔地介紹它們之間的聯系與區別。 這些概念之間的根本區別&#xff0c;在于是物理上的概念還是邏輯上的概念&#xff0c;也即是虛地址還是實…

匯聚榮:新手做拼多多應該注意哪些事項?

新手在拼多多開店&#xff0c;面臨的是競爭激烈的市場和復雜的運營規則。要想在這個平臺上脫穎而出&#xff0c;必須注意以下幾個關鍵事項。 一、市場調研與定位 深入了解市場需求和競爭對手情況是新手開店的首要步驟。選擇有潛力的細分市場&#xff0c;并針對目標消費者群體進…

華為云服務培訓

一、存儲類服務實踐 是什么&#xff1a; 云硬盤( Elastic Volume Service )是一種為 ECS&#xff08;彈性云服務器&#xff09;、BMS&#xff08;裸金屬服務器&#xff09; 等計算服務提供持久性存儲的服務。 作用&#xff1a; 它通過數據冗余和緩存加速等多項技術&#xf…

卷積報錯:AttributeError: ‘Conv2d‘ object has no attribute ‘total_ops‘ (已解)

AttributeError: ‘Conv2d’ object has no attribute ‘total_ops’ File "/home/...../..._encoder.py", line 34, in forwardx = self.conv(x)File "/home/...../python3.8/site-packages/torch/nn/modules/module.py", line 1511, in _wrapped_call_im…

Spring系列-03-BeanFactory和Application接口和相關實現

BeanFactory BeanFactory和它的子接口們 BeanFactory 接口的所有子接口, 如下圖 BeanFactory(根容器)-掌握 BeanFactory是根容器 The root interface for accessing a Spring bean container. This is the basic client view of a bean container; further interfaces such …

windows 11上自帶時間管理-番茄工作法

在 Windows 11 中&#xff0c;你可以使用 專注 功能來最大程度地減少干擾&#xff0c;幫助你保持專注。 專注的工作原理 專注時段打開后&#xff0c;將會出現以下情況&#xff1a; 專注計時器將顯示在屏幕上 請勿打擾將打開 任務欄中的應用不會閃爍發出提醒 任務欄中應用的…

內網穿透原理解析

在互聯網信息時代的今天&#xff0c;我們經常會聽到“內網穿透”&#xff0c;卻有很多人對此并不了解&#xff0c;下面小編給大家介紹一下內網穿透的工作原理。 1. 什么是內網穿透? 在了解內網穿透原理之前&#xff0c;我們先說什么是內網穿透。內網&#xff0c;就是在公司或…

SpringCloud系列(23)--手寫實現負載輪詢算法

前言&#xff1a;在上一篇文章中我們介紹了關于負載輪詢算法的原理以及看了源代碼&#xff0c;而本章節內容則是著重于我們自己手寫一個負載輪詢算法 1、分別編寫provider-payment8001、provider-payment8002這兩個子項目的PaymentController類&#xff0c;增加一個/payment/lb…

C++中引用的全面解析與實戰應用

C中的引用作為一種強大的特性&#xff0c;不僅能夠提升代碼的效率和清晰度&#xff0c;還能在一定程度上保障數據的安全性。本文將深入探討引用的各個方面&#xff0c;包括其定義、使用場景、類型、與指針的區別&#xff0c;并通過實例加以說明。 引用的定義與基本概念 引用可…

探究Python中的元組:不可變性與多重用途

元組是 Python 中的另一種重要數據結構&#xff0c;與列表相似&#xff0c;但具有一些關鍵區別。讓我們來詳細了解一下 Python 中的元組&#xff0c;包括基本語法、常用命令、示例代碼、應用場景、注意事項和總結。 基本語法 創建元組 在 Python 中&#xff0c;元組使用圓括…