SpringBoot Starter机制

一、Starter简介

Spring Boot的starter机制是一种便捷的依赖管理工具,它允许开发者快速地引入和配置一系列相关的库和组件。每个starter都是一个专门的集合,包含了启动某个模块所需的配置和依赖项。例如,你想使用reids插件,那么可以直接在pom.xml文件中引入spring-boot-starter-redis后,SpringBoot为我们完成自动装配。引入的组件都是直接嵌入就能够使用,无需过多的配置,而原来各种组件需要的配置都在 stater 中按照默认的方式设定。这也是SpringBoot配置文件相比于SpringMVC极大减少的原因,同时 stater 的配置信息也可以在 Spring Boot 的 yml/properties 配置文件中,从而覆盖默认的配置。

二、Starter的优点

Spring Boot starter的优点包括但不限于以下几点:

  1. 简化依赖管理:简化了项目依赖管理,自动处理版本兼容性问题,避免了手动配置依赖版本的麻烦。
  2. 一致的配置:提供了统一的配置方式,减少了配置差异带来的问题。
  3. 自动配置:Spring Boot根据starter提供的元数据自动配置相关组件,无需编写繁琐的配置代码。
  4. 易于使用:只需在项目的pom.xml或build.gradle文件中添加对应的starter依赖,无需编写大量配置代码。
  5. 易于扩展:可以创建自定义的starter,复用和共享代码。
  6. 快速启动:通过预设的配置,可以快速启动和运行Spring应用程序,减少了项目搭建的时间。
  7. 模块化设计:每个starter专注于一个功能模块,使得项目结构更加清晰,便于维护和扩展。
  8. 灵活配置:虽然提供了默认配置,但允许开发者通过配置文件覆盖这些默认值,以适应不同的需求。

三、Starter的组成

Spring Boot starter通常由以下几个组成部分构成:

  1. 自动配置类:这些是带有@Configuration注解的类,它们包含了一系列的Bean定义和方法,这些方法会在特定条件下被调用,从而自动配置应用程序中的服务。例如,spring-boot-starter-web中包含了用于自动配置Tomcat和Spring MVC的类。
  2. 条件注解:使用@Conditional系列注解(如@ConditionalOnClass, @ConditionalOnMissingBean等)来定义自动配置类的触发条件。这意味着只有当满足这些条件时,自动配置的Bean才会被创建。
  3. 自动配置元数据:通过META-INF/spring.factories文件定义自动配置类,Spring Boot在启动时会读取这个文件,并根据其中的信息来加载相应的自动配置类。
  4. 默认配置属性:在application.propertiesapplication.yml中提供默认配置属性,这些属性可以被覆盖,以便于开发者根据自己的需要进行定制化配置。
  5. 依赖管理:starter会声明其依赖的其他库和模块,并通过Spring Boot的依赖管理机制,确保所有依赖项的版本兼容性。
  6. 示例配置:通常会包含一些示例配置文件,以展示如何使用starter中的功能。
  7. 资源文件:可能包含视图模板、静态资源、配置文件等,这些资源文件可以被应用程序直接使用。
  8. 测试支持:提供单元测试和集成测试的支持,有时会包含一些测试类和测试配置。
  9. 文档:良好的starter通常会附带详细的文档,说明如何使用starter以及如何自定义配置。

四、Starter工作原理

Spring Boot Starter的工作原理基于以下几个关键点:

  1. 依赖管理:每个Starter定义了一组依赖关系,当你在项目中引入一个Starter时,所有声明在该Starter中的依赖也会被自动下载到项目中,无需单独声明。Spring Boot利用Maven或Gradle的依赖管理机制来确保版本兼容性,避免了手动解决依赖版本冲突的麻烦。
  2. 自动配置:Starters包含了自动配置类,这些类使用Spring的条件注解(如@ConditionalOnClass@ConditionalOnMissingBean等)来决定是否激活特定的配置。例如,如果项目中有spring-boot-starter-web依赖,那么Spring Boot会自动配置一个嵌入式的Tomcat服务器和Spring MVC的DispatcherServlet
  3. 约定优于配置:Spring Boot Starter遵循约定优于配置的原则,提供了一套默认的配置,这意味着开发者不需要编写大量配置代码,Spring Boot会基于默认规则配置应用程序。当然,这些默认值可以通过application.propertiesapplication.yml文件进行覆盖。
  4. 属性配置:Starters提供了一组配置属性,这些属性可以在配置文件中进行自定义,从而让开发者根据实际需求调整应用程序的行为,而无需修改代码。
  5. 条件加载:Spring Boot使用条件注解来决定是否加载某个组件。这意味着只有当相关的类或Bean在类路径上存在时,相关的配置才会生效。
  6. SPI机制:Spring Boot Starter可以通过服务提供者接口(SPI)机制进行扩展。开发者可以通过实现自定义的SPI来扩展Starter的功能或替换掉Starter内部的某些组件。

五、创建自定义Starter

创建一个自定义的Spring Boot Starter通常涉及以下几个步骤:

  1. 新建Maven项目:使用Spring Initializr(https://start.spring.io/)或者手动创建一个新的Maven项目,并确保添加了spring-boot-starter-parent作为父POM,以便继承Spring Boot的配置。在新建Maven项目的pom文件中置合适的groupIdartifactId版本号,官方建议自定义starter的artifactId使用xxx-spring-boot-starter 命名规则,以区分SpringBoot生态提供的starter。
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.x.x.RELEASE</version>
    <relativePath/>
</parent>

<groupId>com.example</groupId>
<artifactId>test-spring-boot-starter</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
  1. 添加依赖:根据需要添加你的Starter依赖的库。如果你的Starter依赖于其他已有的Starters,比如spring-boot-starter-web,那么你应该在pom.xml中添加相应的依赖。
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- 其他依赖 -->
</dependencies>
  1. 创建自动配置类:创建一个带有@Configuration注解的Java类,这个类将包含自动配置的Bean定义。使用@ConditionalOnClass@ConditionalOnMissingBean等注解来确保配置仅在特定条件下生效才会被加载。
@Configuration
@EnableAutoConfiguration
public class MyAutoConfiguration {
    @Bean
    @ConditionalOnMissingBean
    public MyComponent myComponent() {
        return new MyComponent();
    }
}
  1. 配置属性类:如果你的Starter需要支持配置属性,可以创建一个配置属性类,并用@ConfigurationProperties注解绑定配置文件中的属性。这个类通常与自动配置类一起使用。
@ConfigurationProperties(prefix = "my.starter")
public class MyProperties {
    private String someProperty;

    // getters and setters
}
  1. 创建spring.factories文件:在src/main/resources/META-INF目录下创建spring.factories文件,并在其中列出你的自动配置类。这是Spring Boot自动发现和加载配置类的机制。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.starter.MyAutoConfiguration
  1. 打包和部署:将你的Starter打包成JAR文件,并部署到Maven中央仓库或其他可用的仓库中。
mvn clean install
  1. 使用自定义Starter:在其他Spring Boot项目中,添加你的自定义Starter作为依赖,Spring Boot将自动检测并应用你的配置。
<dependency>
    <groupId>com.example</groupId>
    <artifactId>test-spring-boot-starter</artartifactId>
    <version>1.0.0-SNAPSHOT</version>
</dependency>

自定义Starter的关键点就是在spring.factories文件中,指定了自动配置类MyAutoConfiguration,Spring Boot在启动时会加载这个自动配置类,同时把这个配置类下定义的符合条件的Bean加载进来。这样当你在其他项目中引入你这个自定义的Starter时,就可以直接使用这些Bean了。

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值