Spring Boot自动配置原理详解:通过thinking-in-spring-boot-samples深入理解
Spring Boot自动配置是其核心功能之一,它能够帮助开发者快速搭建和配置Spring应用,大大减少了传统Spring应用中繁琐的XML配置。本文将通过小马哥书籍《Spring Boot 编程思想》的示例工程thinking-in-spring-boot-samples,深入解析Spring Boot自动配置的原理和实现方式。
一、Spring Boot自动配置的核心概念
1.1 @EnableAutoConfiguration注解
@EnableAutoConfiguration是Spring Boot自动配置的核心注解,它通常添加在Spring Boot应用的入口类上,用于启用Spring Boot的自动配置机制。在thinking-in-spring-boot-samples工程中,我们可以在以下文件中找到@EnableAutoConfiguration的使用示例:
- spring-boot-2.0-samples/auto-configuration-sample/src/main/java/thinking/in/spring/boot/samples/auto/configuration/bootstrap/FormatterBootstrap.java
- spring-boot-2.0-samples/auto-configuration-sample/src/main/java/thinking/in/spring/boot/samples/auto/configuration/bootstrap/EnableAutoConfigurationBootstrap.java
1.2 条件注解
Spring Boot自动配置的实现离不开条件注解,这些注解可以根据不同的条件来决定是否配置某个Bean。常用的条件注解包括:
- @ConditionalOnClass:当类路径下存在指定类时生效
- @ConditionalOnMissingClass:当类路径下不存在指定类时生效
- @ConditionalOnBean:当容器中存在指定Bean时生效
- @ConditionalOnMissingBean:当容器中不存在指定Bean时生效
- @ConditionalOnProperty:当指定的属性有指定的值时生效
二、Spring Boot自动配置的实现原理
2.1 Spring Boot自动配置的流程
Spring Boot自动配置的流程可以概括为以下几个步骤:
- 扫描classpath下的META-INF/spring.factories文件,获取org.springframework.boot.autoconfigure.EnableAutoConfiguration对应的配置类。
- 根据条件注解过滤掉不符合条件的配置类。
- 将剩下的配置类加载到Spring容器中,完成Bean的自动配置。
2.2 Aware接口在自动配置中的作用
Aware接口是Spring框架中的一组接口,它们用于让Bean获取Spring容器的相关信息。在自动配置过程中,Aware接口发挥着重要作用。
从上图可以看出,Aware接口有很多实现类,如ApplicationContextAware、BeanFactoryAware、EnvironmentAware等。这些接口可以让Bean获取到ApplicationContext、BeanFactory、Environment等对象,从而实现更灵活的配置。
2.3 ConversionService在自动配置中的应用
ConversionService是Spring框架中的类型转换服务,它可以将一种类型的对象转换为另一种类型。在自动配置过程中,ConversionService用于处理配置属性的类型转换。
从上图可以看出,ConversionService有很多实现类,如DefaultConversionService、FormatterConversionService等。Spring Boot会自动配置一个ConversionService实例,用于处理配置属性的类型转换。
三、Spring Boot自动配置的实战示例
3.1 自动配置类的实现
在thinking-in-spring-boot-samples工程中,spring-boot-2.0-samples/auto-configuration-sample模块提供了自动配置的示例。我们可以通过以下步骤来了解自动配置类的实现:
- 创建一个配置类,并添加@Configuration注解。
- 在配置类中定义需要自动配置的Bean,并添加相应的条件注解。
- 在META-INF/spring.factories文件中注册该配置类,格式如下:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
thinking.in.spring.boot.samples.auto.configuration.FormatterAutoConfiguration
3.2 EndpointsSupplier在自动配置中的应用
EndpointsSupplier是Spring Boot Actuator中的一个接口,它用于提供Actuator端点。在自动配置过程中,Spring Boot会自动配置一些常用的EndpointsSupplier。
从上图可以看出,EndpointsSupplier有很多实现类,如JmxEndpointsSupplier、ServletEndpointsSupplier等。这些实现类可以提供不同类型的Actuator端点。
四、Spring Boot自动配置的自定义
4.1 排除自动配置类
如果我们不需要某个自动配置类,可以通过@EnableAutoConfiguration注解的exclude属性来排除它,例如:
@EnableAutoConfiguration(exclude = SpringApplicationAdminJmxAutoConfiguration.class)
4.2 自定义自动配置类
我们也可以自定义自动配置类,来满足特定的需求。自定义自动配置类的步骤如下:
- 创建一个配置类,并添加@Configuration注解。
- 在配置类中定义需要自动配置的Bean,并添加相应的条件注解。
- 在META-INF/spring.factories文件中注册该配置类。
五、总结
通过本文的介绍,我们了解了Spring Boot自动配置的原理和实现方式。Spring Boot自动配置通过@EnableAutoConfiguration注解、条件注解、META-INF/spring.factories文件等机制,实现了Spring应用的自动配置,大大简化了Spring应用的开发过程。
在实际开发中,我们可以通过排除自动配置类、自定义自动配置类等方式,来满足不同的需求。同时,thinking-in-spring-boot-samples工程提供了丰富的示例代码,帮助我们更好地理解和应用Spring Boot自动配置。
如果你想深入学习Spring Boot自动配置,可以参考小马哥的书籍《Spring Boot 编程思想》,以及thinking-in-spring-boot-samples工程中的示例代码。要获取该工程,你可以通过以下命令clone仓库:
git clone https://gitcode.com/gh_mirrors/th/thinking-in-spring-boot-samples
希望本文能够帮助你更好地理解Spring Boot自动配置的原理和应用。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考






