【实战】SpringBoot自定义 starter及使用

文章目录

    • 前言
    • 技术积累
      • SpringBoot starter简介
      • starter的开发步骤
    • 实战演示
    • 自定义starter的使用
    • 写在最后

前言

各位大佬在使用springboot或者springcloud的时候都会根据需求引入各种starter,比如gateway、feign、web、test等等的插件。当然,在实际的业务场景中也会有将第三方组件整合为starter供其他项目接入。那么,我们今天就分享一波SpringBoot自定义 Starter及使用。

技术积累

SpringBoot starter简介

starter是Spring Boot中的一个非常重要的概念,Starter相当于模块,它能将模块所需的依赖整合起来并对模块内的Bean根据环境( 条件)进行自动配置。使用者只需要依赖相应功能的Starter,无需做过多的配置和依赖,Spring Boot就能自动扫描并加载相应的模块。

在这里插入图片描述

starter的开发步骤

新建Maven项目,在项目的POM文件中定义使用的依赖;
新建配置类,写好配置项和默认的配置值,指明配置项前缀;
新建自动装配类,使用@Configuration和@Bean来进行自动装配;
新建spring.factories文件,指定Starter的自动装配类;

实战演示

自定义一个简单的starter
本次我们就简单整合一个工具类、一个api接口demo供大家了解创建流程,对于其他的配置项或者涉及数据等等也都在这个基础的starter进行叠加而已。

1、新建Maven项目
在这里插入图片描述

选中两个插web和lombok,点击finish完成项目创建
在这里插入图片描述

2、pom中增加项目依赖不传递配置,以及配置maven打包生成可执行依赖jar

<!--项目依赖不传递
例如:project1依赖a.jar(optional=true),project2依赖project1,则project2不依赖a.jar-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>
<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><!--配置可执行jar的名称,不对原jar重命名为.original--><classifier>exec</classifier><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration>
</plugin>

3、删除不必要的文件,最后剩下的项目格式为
在这里插入图片描述

4、启动类取消自动配置注释并清空方法
在这里插入图片描述

5、.新建spring.factories文件,指定starter的自动装配类
在resource下新建META-INF目录,然后新增spring.factories自动装配文件,并在文件中指定装配类
在这里插入图片描述

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.example.demostarter.DemoStarterApplication

6、新增测试接口和测试类
在这里插入图片描述

/*** TestController* @author Administrator* @version 1.0* @date 2024/1/20 0020 15:50*/
@RestController
public class TestController {/*** TestStarterApi* @param str* @author Administrator* @date 2024/1/20 0020 15:51 * @return java.lang.String*/@GetMapping("/testStartApi")public String TestStarterApi(String str){return "this is a TestStarterApi data is "+str;}}
/*** TestStartUtils* @author Administrator* @version 1.0* @date 2024/1/20 0020 15:52*/
public class TestStartUtils {/*** test* @author Administrator* @date 2024/1/20 0020 15:53 * @return void*/public static void test(){System.err.println("this is a TestStartUtils test method");}
}

7、将demo-starter安装到本地仓库进行测试,当然也可以部署到远程仓库
在这里插入图片描述

也可以用命令: mvn install
在这里插入图片描述
在这里插入图片描述

至此,整个Starter开发完毕,已经install本地仓库,deploy远程仓库同理(mvn deploy)

自定义starter的使用

1、在需要使用starter的maven项目pom中引入demo-starter

<!--demo-starter-->
<dependency><groupId>com.example</groupId><artifactId>demo-starter</artifactId><version>0.0.1-SNAPSHOT</version>
</dependency>

2、编写测试类,并在启动类配置扫描包位置

/*** TestdemoApplicationTests* @author Administrator* @date 2024/1/20 0020 16:33 */
@SpringBootTest
class TestdemoApplicationTests {/*** contextLoads* @author Administrator* @date 2024/1/20 0020 16:33 * @return void*/@Testpublic void contextLoads() {TestStartUtils.test();}}
@ComponentScan("com.example")
@SpringBootApplication
public class TestdemoApplication {public static void main(String[] args) {SpringApplication.run(TestdemoApplication.class, args);}}

3、测试引入starter,效果展示
3.1 可以直接依赖starter中的类并可以进行调用
在这里插入图片描述

3.2 由于启动类配置了扫描包位置可以扫到starter的api
在这里插入图片描述

写在最后

SpringBoot自定义 Starter及使用还是非常简单,我们在创建的时候需要注意maven插件需要增加可执行jar配置,在resource下需要指定starter的自动装配类即可,在使用starter的项目中需要按需增加扫描包以保证框架可以获取到我们的starter文件。

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

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

相关文章

灵活扩展:深入理解MyBatis插件机制

第1章&#xff1a;MyBatis插件的重要性 大家好&#xff0c;我是小黑&#xff0c;咱们今天要聊的是MyBatis插件&#xff0c;MyBatis&#xff0c;大家都不陌生&#xff0c;它是一个ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;让咱们在操作数据库时能更加优雅。但今…

web漏洞总结大全(基础)

前言 本文章是和cike_y师傅一起写的&#xff0c;cike_y博客&#xff1a;https://blog.csdn.net/weixin_53912233?typeblog 也欢迎大家对本文章进行补充和指正&#xff0c;共同维护这个项目&#xff0c;本文的github项目地址&#xff1a; https://github.com/baimao-box/Sum…

Haxe-UnrealEngine5

Haxe-UnrealEngine5 结论 UE C header > External/**.hx.hx > .h/.cpp&#xff0c;和 UE C 一起编译使用 hxcpp 来调试 .hx good&#xff1a; 理论上不仅限反射代码走 UE C&#xff0c;无需维护 backend&#xff0c;比如 Lua Binding理论上接近 UE C 的性能 bad&…

六、Netty核心模块组件

目录 6.1 BootStrap&#xff0c;ServerBootStrap6.2 Future&#xff0c;ChannelFuture6.3 Channel6.4 Selector6.5 ChannelHandler 以及其实现类6.6 Pipeline 和 ChannelPipeline6.7 ChannelHandlerContext6.8 ChannelOption6.9 EventLoopGroup和其实现类 NioEventLoopGroup6.1…

激光无人机打击系统——光束控制和指向系统

激光无人机&#xff08;UAV&#xff09;打击系统中的光束控制和指向系统通常包括以下几个关键组件和技术&#xff1a; 激光发射器&#xff1a;这是系统的核心&#xff0c;负责生成高能量的激光束。常用的激光类型包括固体激光器、化学激光器、光纤激光器等&#xff0c;选择取决…

微软Microsoft推出针对学生的AI练习英语口语工具”阅读教练“:Reading Coach

阅读教练官网链接&#xff1a;https://coach.microsoft.com AI工具专区&#xff1a;AI工具-喜好儿aigc 学生可以通过选择角色和设定&#xff0c;利用AI生成独特的故事&#xff0c;从而激发阅读兴趣并提高阅读流畅度。语音转文本AI能够实时分析学生的阅读流利性&#xff0c;检测…

Golang 搭建 WebSocket 应用(八) - 完整代码

本文应该是本系列文章最后一篇了&#xff0c;前面留下的一些坑可能后面会再补充一下&#xff0c;但不在本系列文章中了。 整体架构 再来回顾一下我们的整体架构&#xff1a; 在我们的 demo 中&#xff0c;包含了以下几种角色&#xff1a; 客户端&#xff1a;一般是浏览器&am…

图论:最短路(dijkstra算法、bellman算法、spfa算法、floyd算法)详细版

终于是学完了&#xff0c;这个最短路我学了好几天&#xff0c;当然也学了别的算法啦&#xff0c;也是非常的累啊。 话不多说下面看看最短路问题吧。 最短路问题是有向图&#xff0c;要求的是图中一个点到起点的距离&#xff0c;其中我们要输入点和点之间的距离&#xff0c;来求…

day01.基础知识

目录 一.函数与语句 1.1进入C 1.1.1main( )头函数 1.1.2 注释 1.1.3头文件 1.1.4预处理 1.1.5命名空间 1.1.6输入与输出 1.1.7格式化 1.2语句 1.2.1声明语句与变量 1.2.2赋值语句 1.3函数 1.3.1使用有返回值的函数 一.函数与语句 1.1进入C 1.1.1main( )头函数 …

rk1126, 实现 yolov8 目标检测

基于 RKNN 1126 实现 yolov8 目标检测 Ⓜ️ RKNN 模型转换 ONNX yolo export model./weights/yolov8s.pt formatonnx导出 RKNN 这里选择输出 concat 输入两个节点 onnx::Concat_425 和 onnx::Concat_426 from rknn.api import RKNNONNX_MODEL ./weights/yolov8s.onnxRKNN_MOD…

MySQL 索引(下)

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;重拾MySQL-进阶篇 &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出现…

推荐新版AI智能聊天系统网站源码ChatGPT NineAi

Nine AI.ChatGPT是基于ChatGPT开发的一个人工智能技术驱动的自然语言处理工具&#xff0c;它能够通过学习和理解人类的语言来进行对话&#xff0c;还能根据聊天的上下文进行互动&#xff0c;真正像人类一样来聊天交流&#xff0c;甚至能完成撰写邮件、视频脚本、文案、翻译、代…

GoZero微服务个人探究之路(七)添加中间件、自定义中间件

说在前面 官方已经自己实现了很多中间件&#xff0c;我们可以方便的直接使用&#xff0c;不用重复造轮子了 开启方式可以看官方文档 中间件 | go-zero Documentation 实现自定义的中间件 在业务逻辑中&#xff0c;我们需要实现自定义功能的中间件 ------这里我们以实现跨源…

Spring+SprinMVC+MyBatis配置方式简易模板

SpringSprinMVCMyBatis配置方式简易模板代码Demo GitHub访问 ssm-tpl-cfg 一、SQL数据准备 创建数据库test&#xff0c;执行下方SQL创建表ssm-tpl-cfg /*Navicat Premium Data TransferSource Server : 127.0.0.1Source Server Type : MySQLSource Server Versio…

Linux ---- 小玩具

目录 一、安装&#xff1a; 1、佛祖保佑&#xff0c;永不宕机&#xff0c;永无bug 2、小火车 3、艺术字和其它 天气预报 艺术字 4、会说话的小牦牛 5、其他趣味图片 我爱你 腻害 英雄联盟 帅 忍 龙 你是猪 福 好运连连 欢迎 加油 想你 忘不了你 我错了 你…

细说JavaScript事件处理(JavaScript事件处理详解)

js语言的一个特色和就是它的动态性&#xff0c;即一时间驱动的方式对用户输入作出反应而不需要依赖服务器端程序。事件是指人机交互的结果&#xff0c;如鼠标移动、点击按钮、在表单中输入数据或载入新的Web洁面等。 一、什么是事件 1、事件类型 1.1、事件源 1.2、事件处理…

Node.js Stream.pipeline() Method

Why Stream.pipeline 通过流我们可以将一大块数据拆分为一小部分一点一点的流动起来&#xff0c;而无需一次性全部读入&#xff0c;在 Linux 下我们可以通过 | 符号实现&#xff0c;类似的在 Nodejs 的 Stream 模块中同样也为我们提供了 pipe() 方法来实现。 未使用 Stream p…

Pyro —— Understanding how pyro works

目录 Simulation fields Inside the Pyro Solver Colliders Pressure projection Simulation fields Pyro是纯体积流体解算器&#xff0c;表示流体状态的数据存于各种标量场和矢量场&#xff1b;Smoke Object会创建这些场&#xff0c;且能可视化这些场&#xff1b; vel场&…

【JavaEE】网络原理:网络中的一些基本概念

目录 1. 网络通信基础 1.1 IP地址 1.2 端口号 1.3 认识协议 1.4 五元组 1.5 协议分层 什么是协议分层 分层的作用 OSI七层模型 TCP/IP五层&#xff08;或四层&#xff09;模型 网络设备所在分层 网络分层对应 封装和分用 1. 网络通信基础 1.1 IP地址 概念:IP地址…

C语言/c++指针详细讲解【超详细】【由浅入深】

指针用法简单介绍 指针&#xff0c;是内存单元的编号。 内存条分好多好多小单元&#xff0c;一个小单元有 8 位&#xff0c;可以存放 8 个 0 或 1&#xff1b;也就是说&#xff0c;内存的编号不是以位算的&#xff0c;而是以字节算的&#xff0c;不是一个 0 或 1 是一个编号&…