前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >创建SpringBoot自动配置:自定义Starter项目

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

作者头像
愿天堂没有BUG
发布2022-10-28 16:24:20
5980
发布2022-10-28 16:24:20
举报
文章被收录于专栏:愿天堂没有BUG(公众号同名)

创建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
复制
-一 spring - boot-starter-msg. iml
-main
test

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

代码语言:javascript
复制
<dependency>
<groupId>org. spri ngframework . boot< / groupId>
<artifactId>spring- boot - autoconfigure</ artifactId>
<version>2.2.1. RELEASE</version>
</ dependency>

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

代码语言:javascript
复制
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
复制
@ConfigurationProperties(prefix = "msg")
public class MsgProperties {
/**
访问发送短信的 url 地址
private String url;
/**
短信服务商提供的请求 keyId
private String accessKeyId;
/**
短信服务商提供的 KeySecret
private String accessKeySecret;
//省略 getter/setter 方法
}

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

代码语言:javascript
复制
@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
复制
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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建SpringBoot自动配置项目
  • 自定义SpringBootStarter项目
  • 本文给大家讲解的内容是创建SpringBoot自动配置项目:自定义Spring BootStarter项目
相关产品与服务
短信
腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档