Spring Boot Starter 是 Spring Boot 中的一个重要概念,它简化了Spring应用程序的初始化和开发过程。
Starter的主要作用和特点:
总之,Spring Boot Starter 为开发者提供了一种快速、简便的方式来构建和开发Spring应用程序,它简化了依赖管理、自动配置、默认配置和可扩展性等方面的问题,使得开发者能够更加高效地开发出高质量的应用程序。
所有的官方启动器都遵循类似的命名模式:spring-boot-starter-*
,其中*
代表特定类型的应用程序。这种命名结构有助于你在需要查找启动器时进行查找。许多IDE中的Maven集成可以让你按名称搜索依赖项。例如,安装了适当的Eclipse或Spring Tools插件后,你可以在POM编辑器中按ctrl-space
键,然后输入“spring-boot-starter”以获取完整列表。
如“创建自己的启动器”部分所述,第三方启动器不应该以spring-boot开头,因为这是为官方Spring Boot工件保留的。相反,第三方启动器通常以项目的名称开头。例如,名为thirdpartyproject
的第三方启动器项目通常命名为thirdpartyproject-spring-boot-starter
。
Spring Boot Starter是Spring Boot提供的一种特殊的依赖管理方式,它可以快速、轻松地创建基于Spring框架的应用程序。它的工作原理主要基于以下两点:
Spring Boot Starter主要完成了两件事:
总的来说,Spring Boot Starter的工作原理就是通过Maven依赖管理和SPI机制,实现对Spring框架及其相关库的有效管理,简化和统一依赖管理系统的初始化过程,从而让开发者能够更轻松地定义并配置所需的依赖。
源码解析:
构造函数:初始化web容器,加载ApplicationContextInitializer的实现类并将其实例化,加载ApplicationListener的实现类并将其实例化
public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
this.resourceLoader = resourceLoader;
Assert.notNull(primarySources, "PrimarySources must not be null");
this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));
// 初始化web容器类型,默认SERVLET,如果存在org.springframework.web.reactive.DispatcherHandler,则是REACTIVE
this.webApplicationType = WebApplicationType.deduceFromClasspath();
this.bootstrapRegistryInitializers = new ArrayList<>(
getSpringFactoriesInstances(BootstrapRegistryInitializer.class));
//找到*META-INF/spring.factories*中声明的所有ApplicationContextInitializer的实现类并将其实例化
setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));
//找到*META-INF/spring.factories*中声明的所有ApplicationListener的实现类并将其实例化
setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
//获得当前执行main方法的类对象
this.mainApplicationClass = deduceMainApplicationClass();
}
Spring Boot Starter Parent 是一个特殊的 starter,它定义了一个Spring Boot 项目的父工程。它提供了很多默认的配置,这些配置可以大大简化我们的开发。
具体来说,Spring Boot Starter Parent主要做了以下事情:
尽管
Java 17
是 Spring Boot 3.0 的最低要求版本,但 spring-boot-starter-parent 将Java编译版本定义为1.8可能是为了保持与现有Spring Boot应用程序和库的兼容性,以及为了提供更好的社区支持和长期维护。
总之,Spring Boot Starter Parent是一个非常重要的依赖管理工具,它为Spring Boot项目提供了一系列的默认配置和功能,使得开发者能够更加高效地开发出高质量的应用程序。
创建自己的Spring Boot Starter涉及一些关键步骤。这里是一个简化的指南来帮助你开始:
首先,创建一个新的Maven或Gradle项目。这个项目将包含你的Starter代码和依赖项。
在项目的pom.xml
(对于Maven)或build.gradle
(对于Gradle)文件中,添加必要的Spring Boot依赖项,以及任何其他你的Starter将要封装的库。
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starterartifactId>
dependency>
dependencies>
创建一个配置类,使用@Configuration
注解,并在必要时使用@Conditional
注解来条件化地配置bean。例如:
@Configuration
@ConditionalOnClass({ YourClass.class })
@ConditionalOnProperty(prefix = "your.starter", name = "enabled", havingValue = "true", matchIfMissing = true)
public class YourAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public YourClass yourClass() {
return new YourClass();
}
}
spring.factories
文件在你的项目资源目录(通常是src/main/resources
)下创建一个META-INF
文件夹,并在其中创建一个名为spring.factories
的文件。在这个文件中,指定你的自动配置类:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.yourpackage.YourAutoConfiguration
如果你的Starter需要配置属性,可以创建一个配置属性类,使用@ConfigurationProperties
注解。
@ConfigurationProperties(prefix = "your.starter")
public class YourProperties {
private boolean enabled = true;
// 其他属性和getter/setter
}
创建自己的Starter需要对Spring Boot的工作方式有深入的了解,特别是自动配置和条件化配置的方面。确保遵循Spring Boot的最佳实践,以确保你的Starter易于使用和维护。