SpringBoot自定义starter

官方文档: Creating your own auto-configuration


背景

spring-boot里面包含的功能已经十分丰富了,但是有些时候,我们还是需要加入一些不包含在这些模块之中的功能。但又想使之成为优雅的,可重用的组件。于是,我们就想是否能仿造spring-boot中其他组件一样的进行导入和管理。
答案是肯定的。下面我们就一期来跟着官方文档来一步一步的完成一个demo。


I 命名

假设你的组件名为foo,那么你将包含如下4个工程

  • foo-spring-boot
  • foo-spring-boot-starter
  • foo-spring-boot-autoconfigue
  • foo-spring-boot-example

II 新建

新建一个maven项目,其package为pom,比如下面这个

1
2
3
4
5
6
7
8
9
10
11
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>tech.iooo</groupId>
<artifactId>coco-spring-boot</artifactId>
<version>0.0.1</version>
<packaging>pom</packaging>
</project>

紧接着你将在这个项目下建立2个modulecoco-spring-boot-startercoco-spring-boot-autoconfigue
其中starter将是一个空项目,管理依赖和载入,在starter的src/main/resources/META-INF下创建一个名为spring.providers的文件。

1
provides: coco-spring-boot-autoconfigue, coco-core

其中autoconfigue是导入的主要工程,在autoconfiguesrc/main/resources/META-INF下创建一个名为spring.factories的文件,该文件将告知SpringBoot,这个autoconfigue的初始类是哪一个。

1
2
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
tech.iooo.coco.spring.boot.autoconfigue.CocoAutoConfiguration

III 编写自动装配的逻辑

编写这个逻辑还需要了解Condition annotations

例子如下:

1
2
3
4
@Configuration
@EnableConfigurationProperties(CocoProperties.class)
public class CocoAutoConfiguration {
}

其中CocoProperties,为配置信息定义类,从application.yml中获取对应的信息.

然后通过spring的@Bean之类的注解进行装载。


参考:
ApplicationContextInitializer接口
Spring Boot自动配置原理

如果你喜欢我的blog,请鼓励我一杯咖啡☕️
0%