自定义SpringBoot Starter实现自动装配


前言

SpringBoot框架是目前企业级Java开发热门框架,亦是微服务项目的基础框架。SpringBoot因其强大的可扩展性及其高度解耦的特性,使程序员者开发起来简单,扩展起来方便。对比我们自己进行SSM框架等搭建,我们需要通过手动将MyBatis等组件注册到Spring容器中,才可以使用,而使用SpringBoot框架,我们只需要引入对应的Starter,SpringBoot在启动时便会自动扫描并将所需Bean组件注入到Spring容器中,实现了自动装配,体现了约定优于配置的理念,减少了开发成本。本文主要介绍如何自定义属于自己的SpringBoot Starter。

一、为自定义的SpringBoot Starter起项目名称

首先,我们需创建一个项目,本文采用maven构建工具进行搭建,并且使用IDEA作为开发工具。根据SpringBoot官网对自定义Starter的命名建议,开发者自定义创建的SpringBoot Starter项目名称的命名规则建议使用xxx-spring-boot-starter,当然SpringBoot自己官方的Starter命名方式则为spring-boot-starter-xxx,两者区分开。
SpringBoot官方对starter命名的建议
我们常用的一些第三方的Starter,当然也遵循着这个建议,例如mybatis-plus-boot-starter(mybatisplus的starter)、activiti-spring-boot-starter (activiti工作流的starter)、pagehelper-spring-boot-starter(pagehelper分页插件的starter)等等。
OK,接下来,我们根据官方的命名建议,创建一个maven工程来实现自定义Starter。
创建一个maven工程 starter名称为customize-spring-boot-starter

二、pom.xml文件依赖

根据SpringBoot官网依赖的建议,实现一个Starter推荐将spring-boot-autoconfigure-processor作为依赖。
官方推荐添加的依赖
以下为本文创建Starter项目的依赖:

   <dependency>
       <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure-processor</artifactId>
        <!--SpringBoot版本自选,本文使用的是SpringBoot2.7.0-->
        <version>${spring-boot.version}</version>
   </dependency>

三、创建自动装配类以及spring.factories文件

默认的SpringBoot项目,在启动类上面都会有一个@SpringBootApplication注解,而此注解包含了@EnableAutoConfiguration,@EnableAutoConfiguration又包含了@Import({AutoConfigurationImportSelector.class}),在AutoConfigurationImportSelector类中有一个getCandidateConfigurations方法,其便是用于解析获取所有spring.factories文件中key值为EnableAutoConfiguration对应的value,有多个时进行迭代,并最终添加到Spring容器中,具体SpringBoot如何实现自动装配,其原理如何,有兴趣的可以阅读我的SpringBoot自动装配实现原理。spring.factories文件的实现原理类似于Java SPI机制,其是SpringBoot提供的一种解耦处理方法,有兴趣的可以阅读一下SpringFactoriesLoader这个类的源码。
根据上述创建的Starter项目,在resource下创建META-INF/spring.factories文件,如下图。
spring.factories文件的创建
创建完spring.factories文件之后,在文件中添加本次需要作为自动装配对象的全类限定名作为EnableAutoConfiguration的一个value值,如下所示。
spring.factories文件配置
附上CustomizeAutoConfiguration类的具体内容,其包含一个方法,作为此Starter项目的一个测试。
CustomizeAutoConfiguration类的具体内容
至此,一个Starter项目便完成编写,当然,本文的Starter中仅仅作为测试演示,实际上的Starter实现功能肯定不止如此,我们可以进行各种Bean的配置、完成接口的实现等等,之后便可以进行打包,开始进行测试。

四、打包Starter,并添加到本地maven仓库

使用maven构建工具进行打包,并使用install命令将打包好的jar添加到本地的maven仓库中,便于本地项目工程通过坐标来引入此创建的自定义Starter项目。添加至本地maven仓库可以使用以下命令:

 install:install-file
        -Dfile=打包的项目路径
        -DgroupId=将来引入的坐标groupId名称
        -DartifactId=将来引入的坐标artifactId名称,与Starter命名规则一致
        -Dversion=将来引入的坐标version名称
        -Dpackaging=Jar

五、Starter测试

将添加在本地仓库的Starter进行依赖引入,并对完成的Starter进行测试,注入customizeAutoConfiguration对象,可以获得到相应的对象,调用其调用方法能够正常运行,则说明自定义的Starter项目已实现自动装配,注册在Spring容器中了!

  <!--将自定义Starter依赖引入-->
  <dependency>
       <groupId>p.wlrkk</groupId>
        <artifactId>customize-spring-boot-starter</artifactId>
        <version>1.0.0</version>
  </dependency>
/**
*   进行Starter测试
*/
@SpringBootTest
class ResearchApplicationTests {

    @Autowired
    CustomizeAutoConfiguration customizeAutoConfiguration;

    @Test
    public void testStarterAutoConfigure(){
        customizeAutoConfiguration.testAutoConfiguration("test");
    }

}

运行结果如下:
成功实现自动装配
此时,在SpringBoot启动完成之后,我们自定义的CustomizeAutoConfiguration已自动装配到Spring容器中,可以通过bean的类型进行注入和使用。

总结

通过自定义SpringBoot Starter既能够实现高度解耦,我们可以在需要用时添加对应的Starter,而且能够实现自动装配,无需进行其他配置,只需要引入Starter即可实现开箱即用,方便开发者的开发。例如mybatis-plus-boot-starter、activiti-spring-boot-starter 、pagehelper-spring-boot-starter,都是减少直接使用其对应框架的一系列配置,通过Starter先将约定好的配置进行实现,我们便可以直接在Spring容器中获取到这些对象来使用。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值