如何优雅地创建一个自定义的Spring Boot Starter

这篇具有很好参考价值的文章主要介绍了如何优雅地创建一个自定义的Spring Boot Starter。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

优雅永不过时,希望看完本文,你会觉得starter如此优雅!

Spring Boot Starter是一种简化Spring Boot应用开发的机制,它可以通过引入一些预定义的依赖和配置,让我们快速地集成某些功能模块,而无需繁琐地编写代码和配置文件。Spring Boot官方提供了很多常用的Starter,例如spring-boot-starter-webspring-boot-starter-data-jpa等,但有时候我们也需要根据自己的业务需求,创建一些自定义的Starter,以便在不同的项目中复用一些通用的功能或组件。本文将以一个简单的日期格式化功能为例,介绍如何创建一个自定义的Spring Boot Starter,并说明其原理和使用方法。


目录

一、Starter的命名规范

二、Starter项目的结构

三、Starter项目的依赖

四、Starter项目的属性类

五、Starter项目的业务功能类

六、Starter项目的自动配置类

七、Starter项目的自动装配文件

八、Starter项目的使用方法

九、Starter项目的原理

总结


一、Starter的命名规范

在创建一个自定义的Starter之前,我们需要先确定它的名称。Starter的命名有一种习惯,官方的Starter一般都是以spring-boot-starter-为前缀,后面跟上模块名,例如spring-boot-starter-web表示集成了Web开发相关的依赖和配置。而我们自定义的Starter一般都是以模块名为前缀,后面跟上-spring-boot-starter,例如woniu-spring-boot-starter表示集成了日期格式化相关的依赖和配置。这样做的目的是为了避免与官方或其他第三方提供的Starter产生冲突或混淆。

二、Starter项目的结构

创建一个自定义的Starter项目和创建一个普通的Spring Boot项目没有太大区别,我们可以使用IDE或者Spring Initializr来快速生成一个基本的项目结构。一个典型的Starter项目结构如下:

woniu-spring-boot-starter
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com.woniu.util
│   │   │       ├── autoconfigure // 自动配置类所在的包
│   │   │       │   ├── WoniuAutoConfiguration.java // 自动配置类
│   │   │       │   └── WoniuProperties.java // 属性类
│   │   │       └── util // 业务功能类所在的包
│   │   │           └── WoniuUtil.java // 业务功能类
│   │   └── resources
│   │       └── META-INF
│   │           └── spring.factories // Spring Boot自动装配文件
│   └── test
│       └── java
├── pom.xml // Maven依赖管理文件
└── README.md // 项目说明文档

三、Starter项目的依赖

在创建一个自定义的Starter项目时,我们需要在pom.xml文件中添加一些必要的依赖。首先,我们需要添加spring-boot-starter作为基础依赖,它提供了Spring Boot核心功能和默认配置。其次,我们需要添加spring-boot-configuration-processor作为编译时依赖,它可以帮助我们生成属性类和配置元数据,并且设置为可选依赖,避免传递给其他项目。最后,我们需要添加我们要集成的功能模块相关的依赖,例如在本例中,我们要集成日期格式化功能,所以我们不需要添加其他额外的依赖。以下是一个示例:

<dependencies>
    <!-- 基础依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <!-- 编译时依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

四、Starter项目的属性类

在创建一个自定义的Starter项目时,我们需要编写一个属性类,用来定义我们要集成的功能模块所需的配置项,并且使用@ConfigurationProperties注解来指定配置文件中的前缀。例如,在本例中,我们要集成日期格式化功能,所以我们需要定义一个日期格式的配置项,并且使用woniu作为配置文件中的前缀。以下是一个示例:

package com.woniu.util.autoconfigure;

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "woniu")
public class WoniuProperties {

    private String pattern = "yyyy-MM-dd hh:mm:ss"; // 日期格式,默认为"yyyy-MM-dd hh:mm:ss"

    // 省略getter和setter方法
}

五、Starter项目的业务功能类

在创建一个自定义的Starter项目时,我们需要编写一个或多个业务功能类,用来实现我们要集成的功能模块的具体逻辑。例如,在本例中,我们要集成日期格式化功能,所以我们需要定义一个日期工具类,用来根据配置的日期格式将日期转换为字符串。以下是一个示例:

package com.woniu.util.util;

import java.text.SimpleDateFormat;
import java.util.Date;

public class WoniuUtil {

    private String pattern; // 日期格式

    public WoniuUtil(String pattern) {
        this.pattern = pattern;
    }

    public String dateToStr(Date date){
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        String format = sdf.format(date);
        return format;
    }
}

六、Starter项目的自动配置类

在创建一个自定义的Starter项目时,我们需要编写一个自动配置类,用来根据属性类和业务功能类,创建相应的Bean对象,并且使用@EnableConfigurationProperties注解来启用属性类,使用@ConditionalOnClass注解来判断业务功能类是否存在,使用@ConditionalOnProperty注解来判断配置文件中是否有相应的配置项。例如,在本例中,我们要集成日期格式化功能,所以我们需要根据WoniuPropertiesWoniuUtil,创建一个WoniuUtil类型的Bean对象,并且使用woniu.enabled作为配置文件中的开关项。以下是一个示例:

package com.woniu.util.autoconfigure;

import com.woniu.util.util.WoniuUtil;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableConfigurationProperties(WoniuProperties.class)
@ConditionalOnClass(WoniuUtil.class)
@ConditionalOnProperty(prefix = "woniu", name = "enabled", havingValue = "true")
public class WoniuAutoConfiguration {

    private final WoniuProperties woniuProperties;

    public WoniuAutoConfiguration(WoniuProperties woniuProperties) {
        this.woniuProperties = woniuProperties;
    }

    @Bean
    public WoniuUtil woniuUtil() {
        return new WoniuUtil(woniuProperties.getPattern());
    }
}

七、Starter项目的自动装配文件

在创建一个自定义的Starter项目时,我们需要在resources/META-INF目录下创建一个名为spring.factories的文件,用来指定我们的自动配置类,让Spring Boot能够在启动时自动扫描并加载它。以下是一个示例:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.woniu.util.autoconfigure.WoniuAutoConfiguration

八、Starter项目的使用方法

在完成了一个自定义的Starter项目后,我们可以将它打包成jar文件,并且发布到Maven仓库或者本地仓库,这样就可以在其他项目中引用它了。例如,在本例中,我们可以在其他项目的pom.xml文件中添加如下依赖:

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

然后,在其他项目的配置文件中添加如下配置项:

woniu:
  enabled: true # 开启日期格式化功能
  pattern: yyyy-MM-dd # 设置日期格式,可选,默认为yyyy-MM-dd hh:mm:ss

最后,在其他项目的代码中,我们可以通过注入WoniuUtil类来调用日期格式化功能。例如:

package com.example.demo;

import com.woniu.util.util.WoniuUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;

@RestController
public class DemoController {

    @Autowired
    private WoniuUtil woniuUtil;

    @GetMapping("/date")
    public String date() {
        Date date = new Date();
        String str = woniuUtil.dateToStr(date);
        return str;
    }
}

这样,我们就可以通过访问/date来获取格式化后的日期字符串了。

九、Starter项目的原理

Starter项目的核心原理是基于Spring Boot的自动装配机制,即根据类路径和配置文件中的条件,动态地创建和注入Bean对象到应用上下文中。Starter项目通过在resources/META-INF目录下创建一个名为spring.factories的文件,来指定自动配置类的全限定名,让Spring Boot在启动时能够扫描并加载它。自动配置类则通过一系列的注解来定义和控制自动装配的逻辑,例如:

  • @Configuration注解标识这是一个配置类,用来创建和注册Bean对象。
  • @EnableConfigurationProperties注解启用属性类,并将其注入到配置类中。
  • @ConditionalOnClass注解判断类路径中是否存在指定的类,如果存在则满足条件。
  • @ConditionalOnProperty注解判断配置文件中是否存在指定的属性,如果存在并且值与期望相符,则满足条件。
  • @Bean注解根据属性类和业务功能类,创建相应类型的Bean对象,并注册到应用上下文中。

当所有的条件都满足时,Starter项目就能实现自动装配的功能,让我们无需手动编写和配置Bean对象,只需引入依赖和设置属性即可。

总结

本文介绍了如何创建一个自定义的Spring Boot Starter,以及它的命名规范、项目结构、依赖管理、属性类、业务功能类、自动配置类、自动装配文件和使用方法。通过创建一个自定义的Starter,我们可以将一些通用的功能或组件封装起来,方便在不同的项目中复用,提高开发效率和代码质量。同时,本文也介绍了Starter项目的原理和机制,帮助我们深入理解Spring Boot的自动装配特性。不禁感慨,优雅,实在是优雅!文章来源地址https://www.toymoban.com/news/detail-680264.html

到了这里,关于如何优雅地创建一个自定义的Spring Boot Starter的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 自定义 spring-boot-starter 暴露钩子

             最近看了Springboot 相关的源码,正好项目上有需求,需要对自定义的 spring-boot-starter 封装的方法,暴露出钩子。对封装的方法,做一些前置或后置的扩展,所以简单写个demo 记录一下。        这里用两种方法实现上面的需求,一种是使用 ApplicationContext 的事件

    2024年02月09日
    浏览(52)
  • 深入理解Spring Boot Starter:概念、特点、场景、原理及自定义starter

    在Spring框架的发展过程中,为了简化项目的搭建和配置过程,Spring Boot应运而生。Spring Boot通过提供一系列开箱即用的Starter,使得开发者能够快速整合Spring生态系统中的各种技术栈,提升开发效率。本文将深入探讨Spring Boot Starter的基本概念、主要特点、应用场景以及实现原理

    2024年02月22日
    浏览(48)
  • spring boot学习之自定义starter启动器

    starter启动器的目标 引入maven包即可自动装配配置,个人理解,如jdbc引入即可操作数据库 实现 1新建springboot工程编写实现类 2编写配置类 3配置 4打包 4新建工程引入使用

    2024年02月13日
    浏览(56)
  • 如何使用社区版IDEA创建一个Spring Boot项目

    这篇博客,我们要教大家如何使用社区版IDEA来创建一个Spring Boot的项目。 首先我们要下载一个插件——Spring Boot Helper,只有安装了这个插件我们才能创建Spring Boot项目,如下图所示:  【注意】这个时候和平时下载插件不同,不要直接点“下载”按钮, 因为这个插件是需要

    2024年02月12日
    浏览(63)
  • 46、如何理解Spring Boot中的Starter

    使用spring + springmvc,如果需要引入mybatis等框架,需要到xml中定义mybatis需要的bean starter就是定义一个starter的iar包,写一个@Configuration配置类、将这些bean定义在里面,然后在starter包的META-INF/spring.factories中写入该配置类,springboot会按照约定来加载该配置类 开发人员只需要将相应

    2024年02月16日
    浏览(46)
  • idea创建spring项目后报错‘org.springframework.boot:spring-boot-starter-parent:2.7.3‘ not found

    创建新项目后spring-boot-starter-parent找不到,原因在于新建项目选择了spring-boot-starter-parent新版本,而缓存中还是使用的老版本导致。 idea默认缓存maven本地库中的依赖库,在新建项目时会直接到缓存中寻找依赖库。如果相同库只是修改版本会导致idea无法从缓存中依赖到相应的库

    2024年02月07日
    浏览(68)
  • springboot web创建失败,解决Could not find artifact org.springframework.boot:spring-boot-starter-parent:pom

    jdk8不支持3.0以上的springboot版本,如果你在创建项目的时候用的是jdk8,那么我建议你在创建好项目之后自行再pom文件里降级,我刚开始接触springboot时,用的是jdk11,导入的springboot版本是2.7.1,然后弄了差不多半天都找不到原因,然后我就扩大了阿里云的搜索地址,自行在pom文

    2024年02月04日
    浏览(49)
  • 自定义redission装配和集成分布式开源限流业务组件ratelimiter-spring-boot-starter的正确姿势

    自定义redission装配和集成分布式开源限流业务组件ratelimiter-spring-boot-starter的正确姿势   由于使用了redisson-spring-boot-starter,在自定义redisson装配的时候会被redisson-spring-boot-starter里面的start默认装配了,同时在使用开源分布式限流组件ratelimiter-spring-boot-starter的时候,这个里面

    2024年02月07日
    浏览(55)
  • 如何通过IDEA创建基于Java8的Spring Boot项目

    上次发现我的 IDEA 创建 Spring Boot 项目时只支持 11 和 17 的 JDK 版本,于是就通过Maven搭建SpringBoot项目。 究其原因,原来是Spring官方抛弃了Java8!!! 使用IDEA内置的Spring Initializr创建SpringBoot项目时,已经没有了Java8的选项,只支持 = 17的版本: 网上逛了一圈,原来是Spring Boot官

    2024年01月19日
    浏览(56)
  • Spring Boot中如何编写优雅的单元测试

    单元测试是指对软件中的最小可测试单元进行检查和验证。在Java中,单元测试的最小单元是类。通过编写针对类或方法的小段代码,来检验被测代码是否符合预期结果或行为。执行单元测试可以帮助开发者验证代码是否正确实现了功能需求,以及是否能够适应应用环境或需求

    2024年02月11日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包