首页 > 其他分享 >Spring Boot 自定义 starter 启动器

Spring Boot 自定义 starter 启动器

时间:2024-07-06 18:30:44浏览次数:30  
标签:启动器 自定义 Spring boot Boot spring starter

前言:

Spring Boot 为我们提供了自动配置的功能,我们可以像使用插件一样,对各个组件自由组合装配,只需引入定义好的 starter 即可,有点类似于 Java 的 SPI 机制,SPI 机制是为了解决项目与项目之间的解耦,而 Spring Boot starter 方式实现了模块化的解耦,前文我们从 Spring Booot 源码层面分析了自动配置的实现原理,本篇分享一下自定义实现 starter 。

Spring Boot 系列文章传送门

Spring Boot 启动流程源码分析(2)

Spring Boot 启动流程源码分析(2)

Spring Boot 自动配置实现原理(源码分析)

自定义 starter

自定义 starter 基本步骤

Spring Boot starter 利用自动配置的原理,将 starter 中的配置项自动加载到 Spring IOC 容器中,减少了 Spring 复杂的 XML 配置,我们自己实现一个 starter 通常要经过如下步骤:

  1. 创建 Maven 项目,在 pom.xml 文件中引入 spring-boot-configuration 相关依赖。
  2. 编写和配置文件对应的类,提供属性配置。
  3. 编写业务类。
  4. 编写自动配置 AutoConfiguration 类。
  5. 在项目 resources/META-INF 路径下创建 spring.factories 文件。
  6. 打包测试。

创建 Maven 项目 pom.xml 引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.my.study</groupId>
    <artifactId>my-study-spring-boot-start</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>my-study-spring-boot-start</name>
    <description>my-study-spring-boot-start</description>
    <url/>


    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>-->

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

spring-boot-configuration 配置是必选,其他配置根据需要选择引入。

编写和配置文件对应的类,提供属性配置

自定义 Starter 需要配置属性可以在 src/main/resources/application.properties 或 src/main/resources/application.yml 中定义,这些属性可以MyStarterProperties 类完成属性注入。

@Data
@ConfigurationProperties(prefix = "com.study.test")
public class MyStarterProperties {

    private String prefix;

    private String suffix;
}

定义业务类

@Slf4j
public class MyStarterComponent {

    private final MyStarterProperties myStarterProperties;

    public MyStarterComponent(MyStarterProperties myStarterProperties) {
        this.myStarterProperties = myStarterProperties;
    }

    public String myStrartTest() {
        String result = myStarterProperties.getPrefix() + "-" + myStarterProperties.getSuffix();
        log.info("MyStrartComponent方法输出:{}", result);
        return result;
    }
}

编写自动配置 AutoConfiguration 类

创建一个自动配置类,负责配置自定义 Starter 的功能,在自动配置类上使用 @Configuration 注解,并通过其他注解如@ConditionalOnClass、@ConditionalOnProperty 等来定义条件,以确保只有在满足特定条件时才会应用配置,这里只是简单使用了 @Configuration 注解。

@EnableConfigurationProperties({MyStarterProperties.class})
@Configuration
public class MyStarterAutoConfiguration {

    @Bean
    MyStarterComponent getMyStarterComponent(MyStarterProperties myStarterProperties) {
        return new MyStarterComponent(myStarterProperties);
    }
}

创建 spring.factories

在项目 resources/META-INF 路径下创建 spring.factories 文件,把自定义配置类的全限定类名配置进去,如下:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.my.study.start.config.MyStarterAutoConfiguration

在这里插入图片描述

打包测试

以上步骤已经完成了一个自定义 Starter,接下来使用 Maven install 命令打包测试即可。

自定义 Starter 测试验证

自定义 Starter 已经只做完成,并且已经打包到 Maven 仓库了,我们需要新建一个项目进行测试。

测试验证步骤

  1. 新建 Spring Boot 项目。
  2. pom.xml 引入自定义的 Starter。
  3. 在 application.properties 或者 application.xml 文件完成属性配置。
  4. 编写测试代码完成测试。

新建 Spring Boot 项目

新建 Spring Boot 项目非常简单,这里不在演示。

pom.xml 引入自定义的 Starter

<dependency>
	<groupId>com.my.study</groupId>
	<artifactId>my-study-spring-boot-start</artifactId>
	<version>0.0.1-SNAPSHOT</version>
</dependency>

application.properties 或者 application.xml 文件完成属性配置

spring.application.name=my-study-spring-boot
server.port=8081
com.study.test.prefix=myStarter
com.study.test.suffix=hello

编写测试代码

简单写了个接口进行测试。

@RestController
public class MyController {

    @Autowired
    private MyStarterComponent myStrartComponent;

    @GetMapping("/test")
    public String test() {
        return myStrartComponent.myStrartTest();
    }

}

测试结果

在这里插入图片描述

在这里插入图片描述
验证结果符合预期,至此已经完全实现了个一个自定义的 Starter,整个实现过程也是十分简单的,希望可以帮组到有需要的小伙伴。

如有不正确的地方请各位指出纠正。

标签:启动器,自定义,Spring,boot,Boot,spring,starter
From: https://blog.csdn.net/weixin_42118323/article/details/140077777

相关文章

  • springboot长江航运管理系统-计算机毕业设计源码54774
    摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,长江航运公司当然也不例外。长江航运管理系统是以实际运用为开发背景,运用软件工程原理和开发方法,采用Java技术构建的一个管理系统。整个开发过程首先对软件......
  • SpringBoot引入WebSocket
    WebSocket是一种在客户端和服务器之间提供低延迟、全双工通信的网络协议。它允许双方在建立一次连接后,进行实时、持续的数据交换,无需像HTTP那样为每一个请求和响应建立新的连接。WebSocket的设计初衷是解决传统HTTP协议在实时通信方面的不足,比如实现实时聊天、游戏、股票报价等......
  • 【SpringBoot】SpringBoot自动装配原理
    在上一篇文章中,讲述了SpringBoot核心启动流程源码解析其中,主要是构造方法和run方法的处理,本篇接着准备上下文环境后续,讲述是如何将springboot是如何完成自动装配,主线其实就是什么时候完成对主类的加载,也即对SpringBootApplication类加载到IOC容器中什么时候完成对Spring......
  • SpringBoot如何集成和使用开源工作流引擎camunda
    使用camunda开源工作流引擎有:通过docker运行、使用springboot集成、部署camunda发行包、基于源代码编译运行等多种方式。其中,通过源代码编译运行的方式最为复杂,具体参考:https://lowcode.blog.csdn.net/article/details/136206057文本重点介绍如何在SpringBoot应用程序中如何集......
  • spring-关于组件的注入及获取流程
    一、组件注入的基本流程:容器初始化:Spring应用启动时,会读取配置(如XML配置、注解配置等),并根据这些配置创建Bean定义(BeanDefinition)。根据Bean定义,Spring容器实例化Bean,并管理它们之间的依赖关系。依赖解析与注入:当一个Bean依赖于另一个Bean时,Spring容器负责查找并注入这个依赖......
  • spring cloud 上云的情况下,Ribbon 客户端负载均衡 与 ALB 服务端负载均衡的选择
    在云环境(例如AWS)中,由于云提供商通常提供强大的负载均衡服务(如AWS的ALB),一般不再需要使用Ribbon这种客户端负载均衡方案。云环境中的负载均衡器通常能够提供更高的可靠性、可扩展性和简化的配置,因此在上云的情况下,使用云提供的负载均衡器是更优的选择。理由分析云提供的负载均衡......
  • 基于SpringBoot+vue的车辆充电桩系统(带1w+文档)
    基于SpringBoot+vue的车辆充电桩系统(带1w+文档)本次设计任务是要设计一个车辆充电桩管理系统,通过这个系统能够满足车辆充电桩管理系统的管理功能。系统的主要功能包括首页、个人中心、维修员管理、用户管理、电桩类别管理、充电桩管理、充电桩报修管理、维修回复管理、系......
  • 基于java+springboot+vue实现的图书商城管理系统(文末源码+Lw)283
     摘 要现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本图书商城管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理......
  • 基于java+springboot+vue实现的旅游推荐系统(文末源码+Lw)280
    摘 要传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装旅游推荐系统软件来发挥其高效地信息处理的作用,可以规范信息管理流程,让管理工作可以系统化和程序化,同时,旅游推荐系统的有效......
  • 基于java+springboot+vue实现的流浪动物管理系统(文末源码+Lw)277
     摘    要在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对流浪动物信息管理的提升,也为了对流浪动物信息进行更好的维护,流浪动物管理系统的出现就变得水到渠成......