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.mzph.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;元组使用圆括…