Spring Boot 的自动配置是如何实现的
Spring Boot 的自动配置是如何实现的
程序员朱永胜有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准
https://blog.zysicyj.top
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。https://store.amazingmemo.com/chapterDetail/1685324709017001`
Spring Boot 的自动配置实现
Spring Boot 的自动配置是其最核心的功能之一,它可以大幅度简化我们的配置过程。通过自动配置,开发者可以省去大量手动定义 Beans 和导入依赖的过程。自动配置允许我们基于 classpath 中的 jar 依赖自动配置 Spring 应用。下面我们来深入了解它是如何实现的。
基本原理
Spring Boot 的自动配置是通过 **@EnableAutoConfiguration注解来开启的。当我们在项目中添加 Spring Boot Starter 依赖时,这个注解通常会通过@SpringBootApplication** 被引入。
1 |
|
@SpringBootApplication注解是一个组合注解,它集成了以下三个注解:
- @SpringBootConfiguration: 继承自 @Configuration,标记当前类为配置类。
- @EnableAutoConfiguration: 开启自动配置的关键。
- @ComponentScan: 默认扫描当前包下所标有 @Component 的类。
@EnableAutoConfiguration 的工作机制
@EnableAutoConfiguration 背后的关键是 spring.factories 文件。在 Spring Boot 的 jar 包中,每一个 jar 文件的 META-INF
目录下都可能含有一个 spring.factories 文件,这个文件包含了一系列的配置项。
探究 **@EnableAutoConfiguration注解,我们会发现它最终会导致 org.springframework.boot.autoconfigure.EnableAutoConfigurationImportSelector
类的调用。这个类负责从所有的spring.factories** 文件中读取并汇总 EnableAutoConfiguration
键所对应的配置类。
条件化的配置
自动配置类通常配合了 @ConditionalOnClass、**@ConditionalOnMissingBean、@ConditionalOnProperty** 等注解使用,只有在特定条件满足的情况下,对应的配置才会生效。
举个例子,如果你的 classpath 下存在 H2 数据库的类,并且你没有在你的配置中定义 DataSource Bean,Spring Boot 自动配置就会尝试配置一个内存内的 H2 DataSource。
1 |
|
这种机制能确保不会干扰到开发者自己配置的 Beans,同时又能在需要时提供快速的开箱即用体验。
自定义自动配置
开发者还可以定义自己的自动配置类,并通过在 spring.factories 中指定来进行加载。
1 | # src/main/resources/META-INF/spring.factories |
总结
Spring Boot 的自动配置使得开发者能更快速地构建应用,同时为自动配置提供了条件化配置和自定义配置的高度灵活性。通过对启动过程和条件注解的深入理解,我们可以充分利用 Spring Boot 提供的这一强大功能。