SpringBoot自动配置@EnableAutoConfiguration详解

1,099 阅读2分钟

SpringBoot自动配置

Spring Boot是一个基于Spring框架的快速开发应用程序的工具。其中一个重要的特性就是自动配置(Auto-configuration)功能,通过简单地添加依赖和配置,Spring Boot可以为应用程序自动配置各种常见的功能和组件。

@EnableAutoConfiguration注解是实现自动配置功能的核心注解之一。它告诉Spring Boot去自动配置应用程序所需要的各种组件和功能。

当Spring Boot应用程序启动时,它会扫描所有的类路径下的jar包,并根据其中的内容来决定需要自动配置哪些组件和功能。例如,如果classpath中包含了spring-boot-starter-web依赖,那么Spring Boot会自动配置一个嵌入式的Tomcat服务器、Spring MVC框架以及其他相关组件。

@EnableAutoConfiguration注解通常和@SpringBootApplication注解一起使用,@SpringBootApplication注解包含了@Configuration@EnableAutoConfiguration@ComponentScan注解,用于指定Spring Boot应用程序的配置信息、自动配置和组件扫描范围。

源码分析

  1. @EnableAutoConfiguration 注解内部使用 @Import(AutoConfigurationImportSelector.class)来加载配置类。

  2. 查看源码可知,通过autoConfigurationEntry.getConfigurations()获取配置文件的全部参数

image.png

image.png

  1. 在这个getCandidateConfigurations方法中看到,配置文件位置:META-INF/spring.factories,该配置文件中定义了大量的配置类,当 SpringBoot 应用启动时,会自动加载这些配置类,初始化Bean

image.png

  1. 查询导入的名为spring-boot-autoconfigure-xxxxx.jar的依赖包,即可看到 spring.factories

image.png

image.png

  1. 当然并不是所有的Bean都会被初始化,在配置类中使用Condition来加载满足条件的Bean,我们以Redis为例查看源码信息。

image.png

  1. 并且以@ConditionalOnMissingBean这个注解规定了,当我们的Spring容器中没有这个Bean对象才会去构造对象。

image.png