目录
- 前言
- 一、为自定义的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,两者区分开。
我们常用的一些第三方的Starter,当然也遵循着这个建议,例如mybatis-plus-boot-starter(mybatisplus的starter)、activiti-spring-boot-starter (activiti工作流的starter)、pagehelper-spring-boot-starter(pagehelper分页插件的starter)等等。
OK,接下来,我们根据官方的命名建议,创建一个maven工程来实现自定义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文件之后,在文件中添加本次需要作为自动装配对象的全类限定名作为EnableAutoConfiguration的一个value值,如下所示。
附上CustomizeAutoConfiguration类的具体内容,其包含一个方法,作为此Starter项目的一个测试。
至此,一个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容器中获取到这些对象来使用。