美文网首页
分享Spring Boot 自动配置原理

分享Spring Boot 自动配置原理

作者: wds_94 | 来源:发表于2024-12-29 23:15 被阅读0次

Spring Boot 自动配置原理

1. 引入 @EnableAutoConfiguration

在 Spring Boot 应用程序的主配置类(通常是带有 @SpringBootApplication 注解的类)中,通常会引入 @EnableAutoConfiguration 注解,该注解负责启动自动配置功能。

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

2. 解析 @Import 注解

当 Spring 容器启动时,会解析 @Import 注解,并加载相应的配置。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
}

3. DeferredImportSelector

在通过 @Import 导入的配置类中,可能包含一个 DeferredImportSelector。
作用:

  • 确保 Spring Boot 的自动配置类在最后加载。
  • 便于扩展和覆盖已有的配置。
public class AutoConfigurationImportSelector implements DeferredImportSelector, BeanClassLoaderAware {
    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        return getAutoConfigurationEntry(annotationMetadata).getConfigurations();
    }
}

4. 读取 META-INF/spring.factories 文件

Spring Boot 通过 SPI(Service Provider Interface)机制,读取类路径下的 META-INF/spring.factories 文件,该文件包含了各种自动配置类的配置。
示例:spring.factories 文件内容

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.autoconfigure.ClassA,\
com.example.autoconfigure.ClassB

5. 过滤出 AutoConfigurationClass

spring.factories 文件中,Spring Boot 会过滤出所有 AutoConfigurationClass 类型的类,这些类包含了自动配置的具体实现。


6. 条件化加载

最后,Spring Boot 会根据条件(@ConditionalXXX 注解)来排除或包含特定的自动配置类。这些条件会根据应用程序的环境和配置动态生效。

@Configuration
@ConditionalOnClass(DataSource.class)
public class DataSourceAutoConfiguration {
    @Bean
    public DataSource dataSource() {
        return new HikariDataSource();
    }
}

总结

Spring Boot 的自动配置原理是通过 @EnableAutoConfiguration 注解引入自动配置逻辑,然后解析 @Import 注解,加载各种配置类,包括 DeferredImportSelector 和自动配置类。通过 SPI 机制读取 spring.factories 文件,过滤出自动配置类,并根据条件化配置来动态加载这些类,从而实现自动配置的功能。

这种机制使得 Spring Boot 应用程序可以根据环境和需求自动配置,极大地简化了开发和部署的工作。

相关文章

网友评论

      本文标题:分享Spring Boot 自动配置原理

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