如何开发自定义Spring Boot Starter
如何开发自定义 Spring Boot Starter
1. 概要
Spring Boot 为大多数流行的开源项目提供启动器;我们可以编写自己的自定义启动器。如果我们有一个用于组织内部的内部库,那么如果要在Spring引导上下文中使用它,那么为它编写一个启动器将是一个很好的办法
这些启动器使开发人员能够避免冗长的配置并快速启动他们的开发。然而,由于有很多事情是在后台发生的,有时很难理解一个注释或仅仅在pomc .xml中包含一个依赖项是如何支持这么多特性的
在本文中,我们将揭开Spring引导的神秘面纱,以了解在幕后发生了什么。然后,我们将使用这些概念为我们自己的自定义库创建启动器
2. 揭秘Spring Boot的自动配置
2.1 Auto Configuration Classes
当Spring Boot启动时,会在类路径中查找一个名为spring.factories的文件,该文件位于META-INF目录中。让我们来看看spring-boot-autoconfigure项目中这个文件的一个片段:
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
这个文件将名称映射到Spring Boot将尝试运行的不同配置类。因此,根据这个代码片段,Spring Boot将尝试运行RabbitMQ、Cassandra、MongoDB和Hibernate的所有配置类
这些类是否实际运行将取决于类路径上的依赖类的存在。例如,如果在类路径中找到MongoDB的类,MongoAutoConfiguration将运行,所有与mongo相关的bean将被初始化
这个条件初始化是由@ConditionalOnClass注释控制的,让我们看看MongoAutoConfiguration类的代码片段,看看它的用法:
@Configuration
@ConditionalOnClass(MongoClient.class)
@EnableConfigurationProperties(MongoProperties.class)
@ConditionalOnMissingBean(type = "org.springframework.data.mongodb.MongoDbFactory")
public class MongoAutoConfiguration {
// configuration code
}
现在,如果类路径中有MongoClient,那么这个配置类将运行,用用默认配置设置初始化的MongoClient填充Spring bean工厂