SpringBoot 自动配置原理详解

本文深入探讨SpringBoot的自动化配置原理,解释@EnableAutoConfiguration如何引导配置,以及如何通过spring.factories文件选择需要的自动配置类。同时,文章介绍了创建自定义配置资源的方法,并简述了SpringBoot如何处理自定义bean与默认bean的加载顺序。

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

SpringBoot 自动化配置原理详解


前言

该文章主要是介绍SpringBoot的自动化配置原理以及如何自己创建一个自动化的配置。


 

一、SpringBoot是什么?

简单来说SpringBoot是一个脚手架,是对Spring整合其他资源框架的封装。


二、自动化配置原理

SpringBoot要整合其他框架资源,都会以@EnableXXX为启动配置项,在SpringBoot的启动类中有@SpringBootApplication注解,点进去可以看到一个启动自动配置的注解@EnableAutoConfiguration,再点击进去可以看到以下这段代码

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

    Class<?>[] exclude() default {};

    String[] excludeName() default {};
}

    重点就在于@Import({AutoConfigurationImportSelector.class}),在AutoConfigurationImportSelector类中有getCandidateConfigurations方法,得到待配置的class的类名集合,这个集合就是所有需要进行自动配置的类,而是是否配置的关键在于META-INF/spring.factories文件中是否存在该配置信息

   protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
        List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
        Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
        return configurations;
    }

在spring-boot-autoconfigure的jar包的META_INFO/spring.factories中定了很多springboot集成的配置类的类路径。定义了那么多的配置类,我们的项目肯定不能全部用上,那么springboot如何得知我们需要哪些自动配置类,哪些不需要呢?主要看AutoConfigurationImportSelector类中getAutoConfigurationEntry方法,在2.3.3的版本中有128个自动配置类,在springboot找不到资源配置文件时,将会被排除。

springboot是如何做到在我们自己配置了bean,就加载我们自己配置的,而不加载springboot默认的配置bean呢?springboot是通过@ConditionalOnClass、@ConditionalOnMissingClass等一系列的条件注解。


三、如何创建自定义配置资源

   看完上述的描述,现在来创建自定义配置资源是不是很简单呢?无非就是创建一个工程,在META_INFO/spring.factories下面配置一个自己的配置类路径。此处就不黏贴项目了(有问题可以留言沟通)


四、总结

简单总结一下springboot自动配置的流程

 

在springboot如何做到先加载我们自己定义的bean再加载它自己定义的bean,这里涉及到spring对bean的加载过程,由于文章篇幅有限,有兴趣的朋友可以自行查阅或留言,私信交流。
以上就是今天要讲的内容,欢迎留言沟通交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Z涛子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值