Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >创建SpringBoot自动配置:自定义Starter项目

创建SpringBoot自动配置:自定义Starter项目

作者头像
愿天堂没有BUG
发布于 2022-10-28 08:24:20
发布于 2022-10-28 08:24:20
61800
代码可运行
举报
运行总次数:0
代码可运行

创建SpringBoot自动配置项目

经过前面章节的学习,我们已经了解了 Spring Boot 的核心运作原理,同时也学习了几个常用框架的自动配置机制及源代码解析。Spring Boot 默认实现了许多的 starter,可以在项目中快速集成。但如果我们所需的 starter 并不在其中,又想借鉴 Spring Boot 的 starter 的创建机制来创建自己框架 starter,该怎么办呢?本章将带领大家创建一个自定义的 starter 项目。

在具体实践的过程中我们会经常遇到这样的情况,比如几个项目都需要发送短信验证码的子项目(针对大多数没有采用服务化的场景)。那么,最笨的方法就是每个项目中都重新写一份执行程序, 或者更进一步是创建一 个单独的子项目,然后每个项目都依赖 jar 包。如果项目采用的是 Spring Boot 的项目框架,那事情就会变得更加简单,这时候 Spring Boot 的自动配置便派上用场了

下面,我们就以发送短信验证码这样的场景来自定义- -个 starter.在此之前,我们先总结一下之前讲解的自动配置 starter 的基本条件。

首先,需要在 classpath 中存 在用于判断是否进行自动配置的类;然后,当满足这些条件之后,需要通过自定义的 Bean 将其实例化并注册到容器中;最后,这一过程通过 Spring Boot自动配置的机制自动完成。关于自动配置机制的实现,我们已经在前面章节中详细讲述过了。

自定义SpringBootStarter项目

这里通过 maven 项目管理工具进行 starter 的创建。首先创建一个简单的 maven 项目,该项目可通过 Intellj idea 等 IDE 进行创建,也可通过 maven 命令进行创建。创建之后项目的目录结构如下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-一 spring - boot-starter-msg. iml
-main
test

在完成了项目的创建和基础依赖的添加之后,便开始相应功能的实现。首先,创建一个MsgService 类。该类不仅提供了短信发送的功能实现,也会被用于 Spring Boot 判断是否进行自动配置的核心类。而后者的场景就是 SpringBoot 用于检查 classpath 中是否存在该类。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
<groupId>org. spri ngframework . boot< / groupId>
<artifactId>spring- boot - autoconfigure</ artifactId>
<version>2.2.1. RELEASE</version>
</ dependency>

在 MsgService 中用到了一一个工具类 HttpClientUtils。在 HttpClientUtils 这里仅以打印请求的参数信息用作示例,生产环境中根据具体场景进行实现。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class HttpClientUtils {
public static int sendMsg(String url, String accessKeyId, String accessKe
Secret, String msg) {
// TODO 调用指定 url 进行请求的业务逻辑
System. out . println("Http 请求,url=" + url + ";accessKeyId=" + accessKey
Id +
";accessKeySecret=" + accessKeySecret + ";msg=" + ms
g)
return 0; }}

完成了基础的功能类实现之后,下一步提供自动配置的属性配置类 MsgProperties,它的作用是封装 application.properties 或 application.yml 中的基础配置。在这里就是关于短信发送的基础参数,前缀统一采用 msg, 通过@ConfigurationProperties 注解来进行对应属性的装配。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@ConfigurationProperties(prefix = "msg")
public class MsgProperties {
/**
访问发送短信的 url 地址
private String url;
/**
短信服务商提供的请求 keyId
private String accessKeyId;
/**
短信服务商提供的 KeySecret
private String accessKeySecret;
//省略 getter/setter 方法
}

有了属性配置类和服务类,下面就是通过自动配置类将其整合, 并在特定条件下进行实例化操作。自动配置类本质上就是一个普通的 Java 类 ,通过不同的注解来对其赋予不同的功能。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Configuration
@ConditionalOnClass (MsgService. class)
@EnableConfigurationProperties (MsgProperties.class)
public class MsgAutoConfiguration {
/**
注入属性配置类
@Resource
private MsgProperties msgProperties;
@Bean
@ConditionalOnMissingBean(MsgService.class)
@ConditionalOnProperty(prefix = "msg", value = "enabled", havingValue =
"true")
public MsgService msgService() {
MsgService msgService = new MsgService(msgProperties. getUr1(), msgPrope
rties.
msgProperties . getAccessKeySecret());
/如果提供了其他 set 方法, 在此也可以调用对应方法对其进行相应的没置或初始化
return msgService;
}
}

MsgAutoConfiguration 类 上 的 注 解 , @Configuration 用 来 声 明 该 类 为 一 个 配 置类;@ConditionalOnClass 注解表示只有当 MsgService 类存在于 classpath 中,该类才会进行相应的实例化; @ EnableConfigurationProperties 会将 application.properties 中对应的属性配置设置于 MsgProperties 对象中。

MsgAutoConfiguration 的 msgService 方法上的注解,@Bean 表明该方法实例化的对象会被加载到容器中; @ConditionalOnMissingBean 表示当容 器中不存在 MsgService 的对象时,才会进行实例化操作;

@ConditionalOnProperty 表示当配置文件中 msg.enabled=true 时才进行相应的实例化操作,默认情况下不会进行实例化操作。

基本功能已经完成,我们只需要将 MsgAutoConfiguration 类进行自动配置注册即可。在前面的章节中我们已经了解到,凡是 classpath' 下 jar 包中 META-INF/spring.factories 中的配置 ,在 Spring Boot 启动时都会进行相应的扫描加载。因此,我们无须直接修改 SpringBoot 的 spring.factories 文件, 只需在新建的 starter 项目中添加对应目录和文件即可。

在当前项目的 resources 目录下创建 META-INF/spring.factories 文件,并对自动配置类进行注册。如果有多个自动配置类,用逗号分隔换行即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
org. springframework . boot . autoconfigure . EnableAutoConfiguration=\com. secbro2 .
msg. MsgAutoConfiguration

至此,一个基于Spring Boot 的自动配置 starter 便完成了。使用 maven 将其打包到本地仓库或上传至私服,其他项目便可以通过 maven 依赖进行使用。

本文给大家讲解的内容是创建SpringBoot自动配置项目:自定义Spring BootStarter项目

  1. 1.下篇文章给大家讲解的是创建SpringBoot自动配置项目:Starter测试使用;
  2. 2.觉得文章不错的朋友可以转发此文关注小编;
  3. 3.感谢大家的支持!

本文就是愿天堂没有BUG给大家分享的内容,大家有收获的话可以分享下,想学习更多的话可以到微信公众号里找我,我等你哦。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 愿天堂没有BUG 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SpringBoot自定义starter及自动配置
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
程序新视界
2019/11/12
1.4K0
创建SpringBoot自动配置项目:Starter测试使用
完成了 starter 项目的创建、发布之后,在 Spring Boot 项目中便可以直接使用了,下面简单介绍一-下 Starter 测试使用步骤,其中省略掉了 Spring Boot 基础项目搭建的部分。
愿天堂没有BUG
2022/10/28
6230
创建SpringBoot自动配置项目:Starter测试使用
SpringBoot之如何自定义一个Starter模块
前面我们说到了在SpringBoot中自定义Enable模块,那么如何在SpringBoot中如何自定义一个Starter模块呢?要想自定义一个Starter模块,就需要理解自动装配的原理。 首先,想想我们自动装配涉及到哪些关键的类或者属性文件?无非就是配置类+spring.factories属性文件。
码农飞哥
2021/08/18
5450
SpringBoot自定义Starter
在前面两章 SpringBoot入门 、SpringBoot自动配置原理 的学习后,我们对如何创建一个 SpringBoot 项目、SpringBoot 的运行原理以及自动配置等都有了一定的了解。如果我们系统中也想要拥有自动配置的功能,可以自己编写一个starter (启动器),想想就觉得很酷,因为这意味着我们不仅有自己定义的自动配的功能,而且具有更通用的耦合度更低的配置。
JAVA葵花宝典
2019/05/24
4060
【案例实战】SpringBoot3.x自定义封装starter实战
(4)新版Spring Boot3.X和旧版SpringBoot2.7之前自定义Starter区别
互联网小阿祥
2023/05/28
2K0
【案例实战】SpringBoot3.x自定义封装starter实战
Spring Boot 自定义 Starter
我们在学习springboot的过程中发现springboot的使用起来非常的简单和方便,在使用springboot明显不用像ssm框架那样配置一大推动的东西,虽说如果熟练的话用起来并不难,但是很烦。
技术从心
2019/10/13
7010
SpringBoot核心【自定义starter】
  为了加深对SpringBoot中自动装配的理解,我们自定义一个starter来实现,具体步骤如下
用户4919348
2019/05/15
7270
你的springboot starter是如何生效的?
一、背景描述二、自定义starter实现方式三、自定义starter依赖加载原理四、spring.factories加载与解析五、参考
叔牙
2023/08/09
6200
你的springboot starter是如何生效的?
手把手教你实现自定义Spring Boot的 Starter
上篇文章《天天用SpringBoot,它的自动装配原理却说不出来》我们有说springBoot的自动装配怎么实现的(建议最好先看下篇文章,因为前后有关系),这篇文章的话我们就自己来实现一个SpringBoot的 starter吧。废话不多说我们还是直入主题吧。
java金融
2020/08/03
1.2K0
手把手教你实现自定义Spring Boot的 Starter
Spring Boot如何自定义Starter
如果我们系统中想要拥有自动配置的功能,可以自己编写一个starter (启动器),想想就觉得很酷,因为这意味着我们不仅有自己定义的自动配的功能,而且具有更通用的耦合度更低的配置。
Bug开发工程师
2019/05/05
6640
Spring Boot如何自定义Starter
SpringBoot 自定义 starter
SpringBoot 最强大的功能就是把我们常用的场景抽取成了一个个starter(场景启动器),我们通过引入springboot 为我提供的这些场景启动器,我们再进行少量的配置就能使用相应的功能。即使是这样,springboot也不能囊括我们所有的使用场景,往往我们需要自定义starter,来简化我们对springboot的使用。
jwangkun
2021/12/23
2780
SpringBoot 自定义 starter
手把手教你打造一个SpringBoot自定义的Starter
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xmt1139057136/article/details/89090150
业余草
2019/04/18
1.6K0
手把手教你打造一个SpringBoot自定义的Starter
19-SpringBoot自动配置-自定义starter实现
在前面我们使用了不少 SpringBoot 的起步依赖,例如 mybatis 、 redis 等起步依赖。那么本篇章,我们首先参考 mybatis 的起步依赖分析,然后自己写一个 redisTemplate 的起步依赖。
Devops海洋的渔夫
2022/03/23
6510
19-SpringBoot自动配置-自定义starter实现
第二十八章:SpringBoot使用AutoConfiguration自定义Starter
在我们学习SpringBoot时都已经了解到starter是SpringBoot的核心组成部分,SpringBoot为我们提供了尽可能完善的封装,提供了一系列的自动化配置的starter插件,我们在使用spring-boot-starter-web时只需要在pom.xml配置文件内添加依赖就可以了,我们之前传统方式则是需要添加很多相关SpringMVC配置文件。而spring-boot-starter-web为我们提供了几乎所有的默认配置,很好的降低了使用框架时的复杂度。 因此在使用xx.starter时
恒宇少年
2018/06/27
1.5K0
Springboot都3.0了,自定义starter咱总不能不会吧
starter是可以包含在应用中的一组依赖描述符,借助 Spring Boot Starter,开发人员可以获得所需的所有 Spring 及相关技术的一站式服务,而无需查看示例代码或复制粘贴依赖的库文件。例如,如果需要 Spring JPA 访问数据库,则可以在工程中直接引用spring-boot-starter-data-jpa。
索码理
2024/01/15
1.2K0
Springboot都3.0了,自定义starter咱总不能不会吧
【Starter 】Spring Boot 3.x 自定义封装Starter 实战
Starter 是 Spring Boot 中的一项创新发明,它的主要作用是降低项目开发中的复杂性,从而简化开发操作。通过使用 Starter,开发人员可以轻松地引入常用的库和配置,避免了繁琐的手动设置。
后端码匠
2024/09/10
5400
【Starter 】Spring Boot 3.x 自定义封装Starter 实战
自定义springboot-starter揭秘自动配置骚操作
==SpringBoot会自动扫描类路径下的 META-INF/spring.factories 文件,根据配置加载配置文件,完成自动配置==
止术
2020/09/15
6310
SpringBoot之旅-启动原理及自定义starter
SpringBoot的一大优势就是Starter,由于SpringBoot有很多开箱即用的Starter依赖,使得我们开发变得简单,我们不需要过多的关注框架的配置。
烂猪皮
2023/09/04
3070
SpringBoot之旅-启动原理及自定义starter
SpringBoot编写自定义的starter
作者:Format 来源:http://fangjian0423.github.io/2016/11/16/springboot-custom-starter/(点击文末阅读原文前往) 在之前的文章中,我们分析过SpringBoot内部的自动化配置原理和自动化配置注解开关原理。 我们先简单分析一下mybatis starter的编写,然后再编写自定义的starter。 mybatis中的autoconfigure模块中使用了一个叫做MybatisAutoConfiguration的自动化配置类。 这个Myb
java达人
2018/01/31
1.2K0
springboot之自定义starter
3、在该工程中点击+,选择new module,新建一个Spring Initializr工程
西西嘛呦
2020/08/26
3770
springboot之自定义starter
相关推荐
SpringBoot自定义starter及自动配置
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验