SpringBoot自定义启动器(自定义Starter)

news2024/11/13 7:59:16

一、如何理解 SpringBoot 的 starter 机制

Spring Boot 的 Starter 机制是其简化开发流程的关键特性之一。通过提供 预配置的依赖项自动配置 支持,这一机制极大地简化了项目的依赖管理配置工作,使得开发者可以更快地搭建应用程序框架,从而能够将更多精力集中在业务逻辑的实现上。

下面是对 starter 机制的一些基本理解:

  1. 简化依赖管理starter POM(Project Object Model)文件是一些预定义的 Maven 或 Gradle 依赖集合,它们包含了一组特定功能所需的库。例如,spring-boot-starter-web 包含了创建一个 Web 应用所需的所有基础依赖,如 Spring Web MVC, Tomcat, Jackson 等。

  2. 自动配置:当添加了一个 starter 依赖后,Spring Boot 会自动查找并应用相关的自动配置类。这意味着开发者不需要手动编写复杂的配置来启用某个功能,框架会根据项目的依赖自动设置好大部分的配置。

  3. 约定优于配置:这是 starter 机制的核心理念之一。Spring Boot 预设了一些合理的默认配置,这样开发者可以不用去关心一些细节配置,从而能够更专注于业务逻辑的实现。

  4. 可扩展性:尽管 starter 提供了很多方便,但它也支持高度定制化。如果开发者需要对某些默认行为进行调整,可以通过提供自己的配置类来覆盖或扩展自动配置的行为。

  5. 简化起步引导starter 使得开发者能够以最少的配置开始一个新的项目。只需要在 pom.xmlbuild.gradle 文件中加入相应的 starter 依赖,就可以快速启动服务,而无需担心底层依赖之间的兼容性和版本冲突问题。

  6. 社区生态:Spring Boot 社区提供了大量的 starter 模块,涵盖了从数据库访问到消息队列等众多领域,这极大地丰富了开发者的选择,同时也促进了技术栈的标准化。

二、实现自定义Starter的核心步骤

1. 创建Maven项目或Gradle项目

首先,你需要创建一个新的Maven或Gradle项目来包含你的starter包。

请注意,这个项目是一个库项目,而不是应用程序。此时不应该使用的SpringBoot的打包插件 spring-boot-maven-plugin,而应该使用Maven默认的打包插件(不添加插件配置即可)。

使用 spring-boot-maven-plugin 打出来的jar包,是一个可运行的应用程序(命令 java -jar xxx.jar 即可运行),不是作为库文件的。

2. 创建自动配置类

根据你的库的功能需求,创建一个或多个自动配置类。这些类会通过@EnableAutoConfiguration或者@SpringBootApplication自动注册到Spring容器中。在自动配置类中,导入需要在目标应用启动时自动添加到容器的组件(Bean)。

示例:

package com.example.robot;

import com.example.robot.core.property.RobotProperties;
import com.example.robot.web.service.RobotService;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Import({RobotService.class, RobotProperties.class})
@Configuration
public class RobotAutoConfiguration {
}

示例代码中是通过 @Import 注入,也可以通过 @Bean 导入。结合条件注入注解,还可以实现更加定制化的注入。

3. 指定自动配置类的位置(SPI)

依赖 SpringBoot 的 SPI 机制,应用可以发现自动配置类的位置。用来指定自动配置类的文件,放在META-INF/spring/ 目录下,文件名为 org.springframework.boot.autoconfigure.AutoConfiguration.imports 。文件中的内容是自动配置类的全限定名(包含包名和类名),每个自动配置类独占一行。

注意: META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件,是SpringBoot3版本使用的;之前的SpringBoot版本,配置文件不同。

示例:

在这里插入图片描述

此配置文件在 jar 包中的位置:

在这里插入图片描述

4. 使用starter

在目标SpringBoot项目中,通过 坐标 引入 自定义Starter 的依赖。此时,自动配置生效,自定义Starter中的组件会在项目启动时,自动注入到容器中。

例如,在目标应用的pom.xml文件中添加如下依赖:

        <dependency>
            <groupId>com.example</groupId>
            <artifactId>robot-spring-boot-starter</artifactId>
            <version>1.0.0</version>
        </dependency>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2123965.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【系统分析师】计算机组成与体系架构

计算机硬件组成&#xff0c;运算器&#xff0c;控制器 计算机基本硬件系统五大组成部分&#xff1a;运算器&#xff0c;控制器&#xff0c;存储器&#xff0c;I/O设备 运算器的四个重要寄存器&#xff1a; 算术逻辑单元&#xff08;实时对数据的算术和逻辑运算&#xff0c;…

C语言 ——— 学习并使用 #if defined #ifdef #ifndef 条件编译指令

目录 学习 #if defined #ifdef #ifndef 条件编译指令 使用 #if defined 和 #ifdef 条件编译指令 使用 #ifndef 条件编译指令 学习 #if defined #ifdef #ifndef 条件编译指令 #if #ifndef 条件编译指令是用来判断某个符号是否被定义过&#xff0c;被定义过的话就为真&#x…

代码随想录冲冲冲 Day41 动态规划Part9

188. 买卖股票的最佳时机 IV 昨天题目是买卖两次&#xff0c;这里是设定好k次 2次的时候一共包含了5中情况 那么k次就包含了2 k 1种情况 初始化只有1 &#xff0c; 3 &#xff0c;5 也就是买入的状况是有值的&#xff0c;所以初始化时候只需要看这些情况知道2 k 之后只要把…

C++11(2)

目录 6。左值引用和右值引用 下面演示左值和左值引用&#xff1a; 下面演示右值和右值引用&#xff1a; 7。移动构造和移动赋值 VS2022的神级优化 List下的移动构造拷贝和深拷贝(实战) 证明&#xff1a;左值是由编译器决定的 附加&#xff1a;自己实现的List.h 6。左值引…

欺诈文本分类检测(十四):GPTQ量化模型

1. 引言 量化的本质&#xff1a;通过将模型参数从高精度&#xff08;例如32位&#xff09;降低到低精度&#xff08;例如8位&#xff09;&#xff0c;来缩小模型体积。 本文将采用一种训练后量化方法GPTQ&#xff0c;对前文已经训练并合并过的模型文件进行量化&#xff0c;通…

fuxa搭建与使用(web组态)

1. 安装Node.js -> npm安装 参考网址&#xff1a;https://blog.csdn.net/WHF__/article/details/129362462 一、安装运行 C:\WINDOWS\system32>node -v v20.17.0 C:\WINDOWS\system32>npm -v 10.8.2 二、环境配置 在安装路径&#xff08;D:\Program_Files\nodejs&a…

打开VSCod安装“PHP Intelephense”或“PHP Server”PHP扩展

安装PHP扩展&#xff1a; 打开VSCode&#xff0c;进入扩展视图&#xff08;或使用快捷键CtrlShiftX&#xff09;。搜索并安装“PHP Intelephense”或“PHP Server”等PHP相关扩展&#xff0c;这些扩展提供了PHP代码的智能感知、代码导航、调试等功能。 配置PHP路径&#xff1a;…

第2章 方法

本书作者起初以为仅靠研究命令行工具和指标就能提高性能。他认为这样不对。他从头到尾读了一遍手册&#xff0c;看懂了缺页故障、上下文切换和其他各种系统指标的定义&#xff0c;但不知道如何处理它们&#xff1a;如何从发现信号到找到解决方案。 他注意到&#xff0c;每当出…

第 8 章图像内容分类

本章介绍图像分类和图像内容分类算法。首先&#xff0c;我们介绍一些简单而有效的方法和目前一些性能最好的分类器&#xff0c;并运用它们解决两类和多类分类问题&#xff0c;最后展示两个用于手势识别和目标识别的应用实例。 8.1 K邻近分类法&#xff08;KNN&#xff09; 在…

2024最新精选文章!分享5款论文ai生成软件

在2024年&#xff0c;AI论文生成软件的出现极大地提升了学术写作的效率和质量。这些工具不仅能够帮助研究人员快速生成论文草稿&#xff0c;还能进行内容优化、查重和排版等操作。以下是五款值得推荐的AI论文生成软件&#xff0c;其中特别推荐千笔-AIPassPaper。 ### 千笔-AIPa…

shader 案例学习笔记之step函数

step函数 step(edge,x)&#xff1a;当x>edge时返回1&#xff0c;否则返回0 #ifdef GL_ES precision mediump float; #endifuniform vec2 u_resolution;void main(){vec2 st gl_FragCoord.xy/u_resolution.xy;float f step(0.5, st.x);gl_FragColor vec4(f, 0, 0, 1.0); …

JQuery中的$

}); 当jquery.color.js动画插件加载完毕后&#xff0c;单击id为“go”按钮时&#xff0c;class为block的元素就有了颜色动画变化。 $.getJSON() $.getJSON()方法用于加载JSON文件&#xff0c;与$.getScript()方法的用法相同。 我们来看demo2. demo2.html 已有评论&#xff1…

Linux下如何使用CMake实现动态库的封装与调用

一、动态库的封装 1.创建工程 首先创建一个qt工程&#xff08;这里我采用的是ui工程&#xff09; 这里选择Widget工程 名字取一个和动态库相关的即可&#xff0c;我这里取的UIDLL 这里选择CMake 这里我选择命名为Dynamic kits采用Qt 5.14.2 GCC 64bit&#xff0c;之后直接下一…

Qt常用控件——QLabel

文章目录 QLabel核心属性文本格式演示显示图片文本对齐自动换行、边距、缩进设置伙伴 QLabel核心属性 QLabel是显示类控件&#xff0c;可以用来显示文本和图片 属性说明textQLabel中的文本textFormat文本格式Qt::PlainText纯文本Qt::RichText富文本&#xff08;支持html标签&…

html+css网页设计 旅游 雪花旅行社5个页面

htmlcss网页设计 旅游 雪花旅行社5个页面 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#…

Windows下meson编译libplacebo库

1、安装msys64&#xff0c;添加系统环境变量C:\msys64 2、修改msys64目录下msys2_shell.cmd文件&#xff1a; 去掉“rem set MSYS2_PATH_TYPEinherit” 中rem&#xff0c;以便于shell能继承系统环境变量&#xff0c;然后保存 rem To export full current PATH from environme…

ESP32 TCP通信交换数据Mixly Arduino编程

TCP通信交换数据 在ESP32与ESP32或其它局域网络内主机间传输数据时&#xff0c;TCP是很方便的&#xff0c;特别当我们连接互联网后ESPnow不能用&#xff0c;MQTT又不稳定发送大量的数据&#xff0c;同时蓝牙有其它用途时&#xff0c;那么学会TCP通信协议就变得十分重要。 一、…

Python数据结构集合的相关介绍

集合是一种无序、可变的数据结构&#xff0c;它也是一种变量类型&#xff0c;集合用于存储唯一的元素。集合中的元素不能重复&#xff0c;并且没有固定的顺序。在Python 提供了内置的 set 类型来表示集合&#xff0c;所以关键字set就是集合的意思。 你可以使用大括号 {} 或者 …

pytest 生成allure测试报告

allure的安装 github地址 allure资产列表 windows下载.zip&#xff0c;解压并配置环境变量PATH&#xff1b;linux下载tar.gz&#xff0c;解压配置&#xff1b; allure作为pytest插件 # 安装 pip install allure-pytest# 执行单元测试&#xff0c;生成allure测试数据&…

如何在内网中与阿里云服务器进行文件传输?[2024详细版]

随着云计算发展&#xff0c;企业和个人选择将数据存储在云端&#xff0c;以提高数据的安全性和可访问性。阿里云作为国内领先的云服务提供商之一&#xff0c;提供了多种云产品和服务。其中&#xff0c;云服务器ECS&#xff08;Elastic Compute Service&#xff09;因其灵活性和…