美文网首页
Spring Boot Starter 的自动加载原理

Spring Boot Starter 的自动加载原理

作者: flystarts | 来源:发表于2025-02-10 09:21 被阅读0次
  1. 启动类与 @SpringBootApplication 注解
    在 Spring Boot 应用中,通常会有一个带有 main 方法的启动类,并且该类会被 @SpringBootApplication 注解标注。
    java
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
@SpringBootApplication 是一个组合注解,它包含了 @SpringBootConfiguration、@EnableAutoConfiguration 和 @ComponentScan 三个重要注解:
@SpringBootConfiguration:本质上是 @Configuration 注解,用于标识该类是一个配置类。
@ComponentScan:启用组件扫描功能,Spring Boot 会自动扫描该启动类所在包及其子包下的所有带有 @Component、@Service、@Repository 等注解的类,并将它们注册为 Spring Bean。
@EnableAutoConfiguration:这是实现自动加载的关键注解,它会触发 Spring Boot 的自动配置机制。

  1. @EnableAutoConfiguration 注解与自动配置导入器
    @EnableAutoConfiguration 注解借助 @Import 注解引入了 AutoConfigurationImportSelector 类。
    java
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @AutoConfigurationPackage
    @Import(AutoConfigurationImportSelector.class)
    public @interface EnableAutoConfiguration {
    // ...
    }
    AutoConfigurationImportSelector 类负责加载自动配置类。它会从 META - INF/spring.factories 文件中读取所有的自动配置类信息。

  2. META - INF/spring.factories 文件
    3.X版本已经替换为AutoConfiguration.imports 文件
    Spring Boot Starter 依赖在其 META - INF/spring.factories 文件中定义了自动配置类。例如,org.springframework.boot.autoconfigure模块的 spring.factories 文件中包含了大量的自动配置类:
    properties
    org.springframework.boot.autoconfigure.EnableAutoConfiguration=
    org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,
    org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,
    org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\

更多自动配置类...

AutoConfigurationImportSelector 会读取这个文件,将所有以 org.springframework.boot.autoconfigure.EnableAutoConfiguration 为键的自动配置类加载到应用上下文中。

  1. 条件注解过滤
    虽然加载了大量的自动配置类,但并不是所有的自动配置类都会生效。Spring Boot 使用了一系列的条件注解(如 @ConditionalOnClass、@ConditionalOnMissingBean、@ConditionalOnProperty 等)来根据不同的条件进行过滤。
    @ConditionalOnClass:当类路径下存在指定的类时,对应的自动配置类才会生效。
    @ConditionalOnMissingBean:当容器中不存在指定类型的 Bean 时,对应的自动配置类才会生效。
    @ConditionalOnProperty:当配置文件中存在指定的属性且值符合要求时,对应的自动配置类才会生效。
    例如:
    java
    @Configuration
    @ConditionalOnClass(DataSource.class)
    public class DataSourceAutoConfiguration {
    // 数据源自动配置逻辑
    }
    只有当类路径下存在 DataSource 类时,DataSourceAutoConfiguration 这个自动配置类才会生效。

总结:
Spring Boot Starter 的自动加载原理是通过 @SpringBootApplication 注解触发,@EnableAutoConfiguration 注解借助 AutoConfigurationImportSelector 从 META - INF/spring.factories 文件中加载自动配置类,然后使用条件注解对这些自动配置类进行过滤,最终将符合条件的自动配置类应用到 Spring 应用上下文中,实现自动配置的功能。

如果使用自动配置时,不知道配置文件如何写时,可以先找到AutoConfiguration类,然后找到里边的Properties类,就知道配置参数如何定义了

相关文章

网友评论

      本文标题:Spring Boot Starter 的自动加载原理

      本文链接:https://www.haomeiwen.com/subject/wustpjtx.html