自定义SpringBoot Starter实现自动装配

目录

  • 前言
  • 一、为自定义的SpringBoot Starter起项目名称
  • 二、pom.xml文件依赖
  • 三、创建自动装配类以及spring.factories文件
  • 四、打包Starter,并添加到本地maven仓库
  • 五、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实现自动装配_第1张图片
我们常用的一些第三方的Starter,当然也遵循着这个建议,例如mybatis-plus-boot-starter(mybatisplus的starter)、activiti-spring-boot-starter (activiti工作流的starter)、pagehelper-spring-boot-starter(pagehelper分页插件的starter)等等。
OK,接下来,我们根据官方的命名建议,创建一个maven工程来实现自定义Starter。
自定义SpringBoot Starter实现自动装配_第2张图片

二、pom.xml文件依赖

根据SpringBoot官网依赖的建议,实现一个Starter推荐将spring-boot-autoconfigure-processor作为依赖。
自定义SpringBoot Starter实现自动装配_第3张图片
以下为本文创建Starter项目的依赖:

   <dependency>
       <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-autoconfigure-processorartifactId>
        
        <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值,如下所示。
自定义SpringBoot Starter实现自动装配_第4张图片
附上CustomizeAutoConfiguration类的具体内容,其包含一个方法,作为此Starter项目的一个测试。
自定义SpringBoot Starter实现自动装配_第5张图片
至此,一个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容器中了!

  
  <dependency>
       <groupId>p.wlrkkgroupId>
        <artifactId>customize-spring-boot-starterartifactId>
        <version>1.0.0version>
  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容器中获取到这些对象来使用。

你可能感兴趣的:(spring,boot,java,spring)