SpringBoot的自动配置

SpringBoot的自动配置简化了应用的配置过程,基于条件注解选择合适的自动配置类进行组件初始化。Starter依赖提供预设的配置,通过@EnableAutoConfiguration在spring.factories中激活配置。自动配置与自动装配不同,前者关注整体配置,后者处理依赖注入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringBoot的自动配置

一、前言

自动配置(Auto-configuration)是指在应用程序启动时,根据一些默认规则和条件,自动配置应用程序的各种组件和功能。自动配置的目的是简化应用程序的配置过程,减少手动配置的工作量。自动配置可以根据应用程序所使用的框架、库或环境条件,自动配置相应的功能和组件。例如,在Spring Boot框架中,它提供了许多自动配置类,根据应用程序的依赖和配置情况,自动配置数据库连接池、Web服务器、日志记录等常见组件,使开发人员可以快速启动应用程序而无需手动配置这些组件。

二、与自动装配的区别

  • 自动装配(autowiring)和自动配置(auto-configuration)是两个在软件开发中经常使用的概念,它们在不同的层面上有所区别。
  • 自动装配(Autowiring)是指在依赖注入(Dependency Injection)的过程中,根据一定的规则自动地将依赖注入到相应的组件中,而无需手动显式地指定依赖关系。自动装配的目的是减少开发人员的工作量,提高开发效率。它可以根据一些规则(如类型匹配、名称匹配等)自动找到需要注入的依赖,然后将其注入到相应的类或组件中。在Spring框架中,自动装配是通过使用 @Autowired 注解或其他装配注解来实现的。
  • 简而言之,自动装配关注的是依赖注入过程中的自动化,它处理类与类之间的依赖关系;而自动配置关注的是应用程序整体的自动化配置,它负责配置和初始化应用程序的各个组件和功能。

三、原理

Spring Boot自动配置的核心注解是 @SpringBootApplication ,是Spring Boot的启动类注解,该注解是一个复合注解。
在这里插入图片描述
Spring Boot的自动配置是通过条件化配置(Conditional Configuration)实现的。它基于条件判断来确定是否需要自动配置某个组件或功能,只有当满足特定条件时才会生效。下面是自动配置的一般原理:

  1. Starter依赖
    Spring Boot中的各个模块通常使用Starter依赖作为入口点。Starter依赖是一组预定义的依赖项集合,它们引入了所需的库和依赖,以及必要的自动配置类。

    如何理解Starter?

    starter就是定义了一个starter的Jar包,在这个Jar包中写入被@Configuration注解标注的配置类,配置类中定义了需要的Bean。然后在starter的META-INF/spring.factories文件中以key-value的形式写入这些配置类,其中有一个key=EnableAutoConfiguration,它对应的value值就是一个个以AutoConfiguration结尾命名的×××AutoConfiguration自动配置类。然后Spring Boot即可按照约定去加载配置类。

    # Auto Configure
    org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
    org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
    org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
    org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
    org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
    org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
    org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
    
  2. 条件注解
    Spring Boot使用条件注解(Conditional Annotation)来标记自动配置类。这些条件注解基于某些条件判断是否要应用自动配置。例如,@ConditionalOnClass 表示只有在类路径中存在指定的类时,自动配置才会生效。
  3. 自动配置类
    自动配置类是实现自动配置的核心。它们通常使用@Configuration注解进行标记,并且包含了一系列的@Bean方法,用于配置和初始化相应的组件。这些自动配置类会根据条件注解的判断,决定是否进行配置。
  4. 自动配置启动
    当应用程序启动时,Spring Boot会自动扫描类路径上的自动配置类。根据条件注解的判断,Spring Boot会选择适合的自动配置类,并将其应用到应用程序中。

通过上述步骤,Spring Boot能够根据应用程序的依赖和环境条件,自动配置相应的组件和功能。这样,开发人员可以快速启动应用程序,并根据需要进行自定义配置,而无需手动配置每个组件。需要注意的是,自动配置并不是强制的,开发人员可以通过显式地配置来覆盖自动配置的行为。同时,Spring Boot还提供了属性配置(Properties Configuration)的机制,使开发人员可以通过配置文件或命令行参数来影响自动配置的行为。

四、总结

所以spring boot在整个的启动过程中,其实就是在类路径的META-INF/spring.factories文件中找到EnableAutoConfiguration对应的所有的自动配置类,然后将所有自动配置类加载到spring容器中。所有自动配置类都是以AutoConfiguration结尾来命名的,而诸多的xxxAutoConfiguration其实就是Spring容器的JavaConfig形式,它的作用就是为Spring容器导入bean。

SpringBoot自动配置是指SpringBoot框架根据项目的依赖配置信息,自动为应用程序进行配置初始化。在SpringBoot的启动类中,通过@SpringBootApplication注解,其中包含了@SpringBootConfiguration、@EnableAutoConfiguration@ComponentScan三个注解。其中,@EnableAutoConfiguration注解是SpringBoot自动配置的核心注解,它会根据项目的依赖配置信息,自动加载配置相应的组件功能。通过@EnableAutoConfiguration注解,SpringBoot会根据classpath中的META-INF/spring.factories文件中的配置,自动加载配置各种自动配置类。这些自动配置类会根据项目的依赖配置信息,自动配置相应的组件功能,从而简化了开发者的配置工作。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [SpringBoot自动配置原理](https://blog.csdn.net/m0_46420244/article/details/126320109)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Springboot 自动配置](https://blog.csdn.net/weixin_45683550/article/details/124261225)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值