【加速Spring项目】探索Spring Boot自动配置的魅力

         Spring Boot 自动配置是指,在 Spring Boot 中,通过一些规则来自动配置应用程序所需的 Bean、服务和其他组件。这种自动配置的方式可以大大减少开发人员的工作量,因为他们不需要手动配置每个组件,而只需要在应用程序中引入所需的模块即可。               

         Spring Boot是一个基于Spring框架的开源Java平台,其主要优势在于能够简化新Spring应用的初始搭建以及开发过程。自动配置是Spring Boot的一个核心特性,它通过少量的配置工作,就能快速启动和运行Spring应用程序。下面将逐步分析如何实现Spring Boot的自动配置:

1. 依赖管理

         Spring Boot使用Maven或Gradle作为构建工具,并通过spring-boot-starter依赖来管理项目所需的库。每个starter都包含了一组方便的依赖描述符,在项目中加入这个starter来获得Spring Boot和相关的库。

2. @SpringBootApplication注解

        当创建一个Spring Boot应用时,通常会在主类上添加@SpringBootApplication注解。这个注解是一个组合注解,它包含了@Configuration@EnableAutoConfiguration@ComponentScan等注解。其中,@EnableAutoConfiguration是自动配置的关键。该注解会去 spring-boot-autoconfigure 工程下寻找 META-INF/spring.factories 文件,此文件中列举了所有能够自动装配类的清单,然后自动读取里面的自动装配配置类清单。 

3. 自动配置类

       Spring Boot在启动时会自动扫描所有的jar包,并查找META-INF/spring.factories文件。在这个文件中,可以通过org.springframework.boot.autoconfigure.EnableAutoConfiguration键指定配置类的全限定名。Spring Boot会根据这些自动配置类来进行项目的自动配置。

       自动配置类给容器中使用 @Bean 放一堆组件。每个自动配置类都可能有这个注解 @EnableConfigurationProperties(xxxProperties.class) ,用来把配置文件(application.xmlapplication.properties)中配的指定前缀的属性值封装到  xxxProperties属性类中。

4. 条件注解

       @EnableAutoConfiguration通过 @Import来作用,项目启动的时候利用 @Import 批量导入组件机制把  autoconfigure  包下的所有 xxxAutoConfiguration  类导入进来(自动配置类),虽然导入这些自动配置类,并不是所有的自动配置类都能生效,按需生效,每一个自动配置类,都有条件注解,只有条件成立,才能生效。自动配置类中的bean定义通常会使用@Conditional注解的条件注解来进行条件化的创建。这些条件注解包括@ConditionalOnClass,@ConditionalOnMissingBean,@ConditionalOnProperty等,它们会根据类路径、bean的存在与否、属性值等条件来决定是否创建某个bean。

       常用的 Conditional 注解: 
       @ConditionalOnClass : classpath 中存在该类时起效
       @ConditionalOnMissingClass : classpath 中不存在该类时起效
       @ConditionalOnBean : DI 容器中存在该类型 Bean 时起效
       @ConditionalOnMissingBean : DI 容器中不存在该类型 Bean 时起效
       @ConditionalOnSingleCandidate : DI 容器中该类型 Bean 只有一个或 @Primary 的只有一个时起效
       @ConditionalOnExpression : SpEL 表达式结果为 true 时
       @ConditionalOnProperty : 参数设置或者值一致时起效
       @ConditionalOnResource : 指定的文件存在时起效
       @ConditionalOnJndi : 指定的 JNDI 存在时起效
       @ConditionalOnJava : 指定的 Java 版本存在时起效
       @ConditionalOnWebApplication : Web 应用环境下起效
       @ConditionalOnNotWebApplication : 非 Web 应用环境下起效  

5. 自定义自动配置

       如果需要自定义自动配置,可创建一个配置类,并使用 @Configuration 注解。在 src/main/resources/META-INF/spring.factories 文件中添加你的配置类。使用 @Conditional 注解的条件注解来控制配置类的加载条件。 

6.小结

       启动类中有一个 @SpringBootApplication 注解,包含了 @SpringBootConfiguration、 @EnableAutoConfiguration , @EnableAutoConfiguration 代表开启自动装配,注解会去 spring-boot-autoconfigure 工程下寻找 META-INF/spring.factories 文件,此文件中列举了所有能够自动装配类的清单,然后自动读取里面的自动装配配置类清单。因为有 @Conditional 条件注解,满足一定条件配置才会生效,否则不生效。 如: @ConditionalOnClass(某类.class) 工程中必须包含一些相关的类时,配置才会生效。所以说当我们的依赖中引入了一些对应的类之后,满足了自动装配的条件后,自动装配才会被触发。 

       自动配置流程图

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值