Spring Boot开发自定义的starter

news2025/1/6 20:14:42

目录

一、Spring Boot的starter概述

二、自定义starter的命名规则

三、自定义starter实战

1. 创建spring工程

 2. 修改pom.xml

 3. 编写配置类

4. 安装到本地maven仓库

5. 在其他项目中引入

6. 测试


一、Spring Boot的starter概述

        SpringBoot中的starter是一种非常重要的机制,能够抛弃以前繁杂的配置,将其统一集成进starter,应用者只需要在maven中引入starter依赖,SpringBoot就能自动扫描到要加载的信息并启动相应的默认配置。starter让我们摆脱了各种依赖库的处理,需要配置各种信息的困扰。SpringBoot会自动通过classpath路径下的类发现需要的Bean,并注册进IOC容器。SpringBoot提供了针对日常企业应用研发各种场景的spring-boot-starter依赖模块。所有这些依赖模块都遵循着约定成俗的默认配置,并允许我们调整这些配置,即遵循“约定大于配置”的理念。

二、自定义starter的命名规则

官方:spring-boot-starter-xxx

自定义:xxx-spring-boot-starter 

三、自定义starter实战

这里我们编写一个发送http请求的starter

1. 创建spring工程

根据需要引入依赖,Spring Configuration Processor 可以自动生成配置时的代码提示

 

 2. 修改pom.xml

创建spring工程后,可以在pom文件里看到当前项目的 GAV

 然后删除 bulid 模块

引入 hutool 依赖,使用hutool的 Http客户端工具类来发送http请求。

官网地址:Hutool — 🍬A set of tools that keep Java sweet.

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.11</version>
        </dependency>

 3. 编写配置类

starter工程不需要Application启动类,可以将其删除

(1)创建OpenApiClient

getNameByGet方法可以向 "http://localhost:8123/api/name/"发送请求,携带一个name参数。

public class OpenApiClient {
    
    public String getNameByGet(String name) {

        //可以单独传入http参数,这样参数会自动做URL编码,拼接在URL中
        HashMap<String, Object> paramMap = new HashMap<>();
        paramMap.put("name", name);

        String result= HttpUtil.get("http://localhost:8123/api/name/", paramMap);
        return result;
    }
}

(2)编写配置类

在配置类中注入了OpenApiClient

@Configuration
@ConfigurationProperties("openapi.client")
@Data
@ComponentScan
public class OpenaipClientConfig {
    
    @Bean
    public OpenApiClient openApiClient() {
        return new OpenApiClient();
    }
}

(3)编写 spring.factories 文件

spring.factories用键值对的方式记录了所有需要加入容器的类

在resource目录下新建 META-INF 目录,在META-INF 目录中创建spring.factories 文件

文件内容如下:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.zy.demospringbootstarter.OpenaipClientConfig

4. 安装到本地maven仓库

双击install,将这个starter工程打包放入maven仓库,如果提示test相关错误,将test模块删除即可。

 可以看到在本地仓库以及有了这个starter的依赖。

5. 在其他项目中引入

在其他工程的pom文件中引入我们自定义的starter,像引入其他starter一样

6. 测试

当调用我们自定义starter的 getNameByGet() 方法时,会自动向运行在8123端口的项目发送请求。

自动注入

 

 测试方法:

    @Test
    public void testStarter() {
        String result = openApiClient.getNameByGet("xiaoxiaoyin");
        System.out.println(result);
    }

测试结果:

        这样就完成了自定义starter的开发,在实际使用中,可以根据自己需要,编写方便自己调用的starter。

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

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

相关文章

【web前端】CSS浮动

多个块级元素纵向排列找标准流&#xff0c;横向排列找浮动 浮动的特性&#xff1a; &#xff08;1&#xff09;浮动元素会脱离标准流&#xff08;脱标&#xff09; &#xff08;有的浮动&#xff0c;有的没浮&#xff09; &#xff08;2&#xff09;浮动的元素会在一行内显示…

C#中[]的几种用法

一、导入外部DLL函数 如[DllImport(“kernel32.dll”)]这叫引入kernel32.dll这个动态连接库。这个动态连接库里面包含了很多WindowsAPI函数,如果你想使用这面的函数&#xff0c;就需要这么引入。举个例子&#xff1a; [DllImport(“kernel32.dll”)] private static extern vo…

栈与队列总结

文章目录栈栈的概述栈的实现栈API设计栈代码实现栈的应用栈在系统中的应用括号匹配问题字符串去重问题逆波兰表达式问题队列队列的概述队列的实现队列的API设计队列代码实现队列的经典题目滑动窗口最大值问题求前 K 个高频元素栈 栈的概述 栈是一种基于先进后出(FILO)的数据结…

Android开发环境搭建

前面从全局和整体角度看了下Android包含哪些东西&#xff0c;自然&#xff0c;也涵盖了开发需要了解的内容&#xff0c;具体参见博文&#xff1a;从技术角度看Android大系统的构成_龙赤子的博客-CSDN博客 写完博文&#xff0c;感觉对Android开发也胸有成竹了&#xff0c;于是就…

ActiveReports.NET 17.0 Crack

ActiveReports.NET 17 添加新的 RDL 仪表板报告类型、新的 Blazor Web Designer&#xff0c;以及对 .NET 7 的全面支持。 2023 年 1 月 25 日 - 15:28新版本 特征 RDL 仪表板 - 新报告类型 RDL 仪表板提供了一种在可滚动的交互式容器中显示数据可视化控件&#xff08;例如图表、…

【Typescript学习】使用 React 和 TypeScript 构建web应用(三)所有组件

教程来自freecodeCamp&#xff1a;【英字】使用 React 和 TypeScript 构建应用程序 跟做&#xff0c;仅记录用 其他资料&#xff1a;https://www.freecodecamp.org/chinese/news/learn-typescript-beginners-guide/ 第三天 以下是视频(0:40-0:60) 的内容 目录第三天1 创建Todo…

JavaEE day6 初识JavaScript

什么是JS JS是通行在各种浏览器的一种语言&#xff0c;JAVA后端代码运行在服务器上&#xff0c;JS代码内容配合HTML&#xff0c;浏览器对JS代码进行解释运行&#xff0c;然后展现在浏览器上&#xff0c;web开发离不开JS。 一般步骤为&#xff1a;&#xff08;index.html与scr…

LinuxC—高级IO

高级IO 1 非阻塞IO/有限状态机编程 1.1 基本概念 定义 有限状态机(Finite State Machine) 缩写为 FSM&#xff0c;状态机有 3 个组成部分&#xff1a;状态、事件、动作。 状态&#xff1a;所有可能存在的状态。包括当前状态和条件满足后要迁移的状态。事件&#xff1a;也称为…

自动驾驶环境感知——视觉传感器技术

文章目录1. 摄像头的成像原理1.1 单目视觉传感器的硬件结构1.2 单目视觉的成像原理 –小孔成像模型1.3 单目视觉的成像原理 – 像素坐标系1.4 单目视觉三维坐标系转换 – 外参1.5 单目视觉的坐标系转换 – 从世界坐标点到像素坐标1.6 单目视觉的特性2. 视觉传感器的标定2.1 视觉…

CSS之精灵图

1. 精灵图 1.1 为什么需要精灵图 一个网页中往往会应用很多小的背景图像作为修饰&#xff0c;当网页中的图像过多时&#xff0c;服务器就会频繁地接收和发送请求图片&#xff0c;造成服务器请求压力过大&#xff0c;这将大大降低页面的加载速度。 为什么使用精灵图&#xff…

9、断点调试

文章目录9、断点调试9.1 为什么需要Debug9.2 Debug的步骤1 添加断点2 启动调试3 单步调试工具介绍9.3 多种Debug情况介绍1 行断点2 方法断点3 字段断点4 条件断点5 异常断点6 线程断点7 强制结束9.4 自定义调试数据视图9.5 常见问题【尚硅谷】idea实战教程-讲师&#xff1a;宋红…

Linux安装mysql--CentOS系统

Linux安装mysql 安装包&#xff1a; https://pan.baidu.com/s/10xvFpfl4nTktaEdhKbY3og 首先启动虚拟机&#xff0c;我是用FinalShell连接的 然后将下载的安装包上传至Linux系统中&#xff0c;直接rz回车就会跳出选择文件的窗口&#xff0c;选择需要上传的安装包即可等待上传…

计算机网络01_---软考高级系统架构师010

计算机网络知识点汇总: IPV4中有单播,组播,广播.IPV6没有广播 网络标准喝协议中要知道有IEEE802.3 以太网协议 局域网是以太网的一种 然后,IEEE802.11是无线局域网协议. TCP/IP协议族,这里,要知道从网络层开始,这里到传输层,然后传输层有个 TCP协议,这里TCP链接的时候有…

【沐风老师】3DMAX地板生成器插件FloorGenerator使用教程

FloorGenerator地板生成器插件&#xff0c;创建任何形状的地板几何图形&#xff0c;你可以完全控制从斜边到木板倾斜的所有参数。 伴随该地板的是”多重纹理贴图&#xff08;MultiTexture&#xff09;“插件&#xff0c;它使你能够将任意数量的位图随机指定给生成的地板。还提…

听障人士亲述:我们在VRChat用手语交流,成员规模5000人

如果你在B站上搜索VRChat&#xff0c;排在前面的热门视频几乎都是与老外聊天的内容。除了练习语言、交文化流外&#xff0c;你还能在VRChat上遇到不少哇哇乱叫的小孩。作为一款VR社交应用&#xff0c;除了有趣的小游戏外&#xff0c;说话聊天也是VRChat关键的玩法之一。而有这么…

离线ctr特征中心更新

3.8 离线ctr特征中心更新 学习目标 目标 了解特征服务中心的作用应用 无 3.8.1 特征服务中心 特征服务中心可以作为离线计算用户与文章的高级特征&#xff0c;充当着重要的角色。可以为程序提供快速的特征处理与特征结果&#xff0c;而且不仅仅提供给离线使用。还可以作为实时…

【My Electronic Notes系列——直流稳压电源】

目录 序言&#xff1a; &#x1f3c6;&#x1f3c6;人生在世&#xff0c;成功并非易事&#xff0c;他需要破茧而出的决心&#xff0c;他需要永不放弃的信念&#xff0c;他需要水滴石穿的坚持&#xff0c;他需要自强不息的勇气&#xff0c;他需要无畏无惧的凛然。要想成功&…

快速安装OpenShift在Ubuntu系统上并使用

目录 OpenShift简介&#xff1a; 服务器信息 安装Docker 安装OpenShift 访问Dashboard oc常用命令 附 OpenShift简介&#xff1a; OpenShift 是一个开源容器应用平台&#xff0c;由 Red Hat 开发。它建立在 Kubernetes 之上&#xff0c;并提供用于部署、扩展和管理容器…

【Linux】基础:线程的同步与互斥

【Linux】基础&#xff1a;线程的同步与互斥 摘要&#xff1a;本文主要介绍线程的同步与互斥方面的内容&#xff0c;分为理论与实现两部分完成。首先从整体上介绍线程同步与互斥相关概念&#xff0c;在理解概念后对两者分开介绍。在互斥方面&#xff0c;主要介绍内容为互斥量的…

LinuxC—线程

线程 1 线程的基本概念 什么是线程 进程其实是一个容器&#xff0c;当我们在编程的时候实际上是在以线程为单位进行编程&#xff0c;包括处理器的调度也是以线程为单位的&#xff0c;一个进程可以有多个线程&#xff0c;一个进程的多个线程共享相同的进程空间&#xff0c;所以…