Springboot Starter 是如何工作的?

实现原理

1. 依赖管理

Springboot Starter 是通过 Maven 或 Gradle 的依赖管理来实现的。一个 Starter 通常是一个 Maven 依赖(或 Gradle 依赖),它本身并不包含功能代码,而是引入了一组相关的依赖。

例如,spring-boot-starter-web 会引入 Spring MVC、Tomcat 等必要的依赖。

2. 自动配置

Springboot 的核心特性之一是自动配置(Auto-Configuration)。通过使用 @EnableAutoConfiguration 注解,Springboot 可以根据类路径中的依赖、Java Bean 定义和其他属性来自动配置 Spring 应用程序。具体的自动配置逻辑是通过一系列 spring.factories 文件来定义的,这些文件位于各个 jar 包的 META-INF 目录下,列出了自动配置类。

3. 条件注解

自动配置类通常使用一系列的条件注解(如@ConditionalOnClass,@ConditionalOnMissingBean,@ConditionalOnProperty等)来控制配置逻辑是否生效。这些条件注解确保只有在满足特定条件时,相关的配置才会应用。

为了更好的说明 starter机制,我们通过一个示例来展示它是如何工作的。

1. 引入依赖

这里以 Maven 项目为例,在pom.xml文件中,添加如下依赖:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>

spring.factories 文件是 Springboot 用于实现自动配置(Auto-Configuration)的一种机制。它位于每个 jar 包的 META-INF 目录下,并且遵循特定的格式来声明各种自动配置类和其他组件。以下是如何配置 spring.factories 文件的详细说明。

2. 创建配置类

首先,创建一个自动配置类。例如,MyAutoConfiguration

package com.example.autoconfig;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyAutoConfiguration {

    @Bean
    public MyService myService() {
        return new MyService();
    }
}

3. 配置 spring.factories

在 src/main/resources/META-INF 目录下创建 spring.factories 文件,并添加如下内容:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\\
com.example.autoconfig.MyAutoConfiguration