从源码角度分析SpringBoot自动装配流程原理:

本文详细分析了SpringBoot中自动装配的原理,重点讲解了@EnableAutoConfiguration注解在`selectImports`方法中的作用,以及它如何通过`SpringFactoriesLoader`扫描`spring.factories`文件来实现自动配置的加载。
摘要由CSDN通过智能技术生成

从源码角度分析SpringBoot自动装配流程原理:

什么是SpringBoot的自动装配?

在传统的 Java 开发中,我们需要自己管理对象之间的依赖关系,通过创建对象实例并将其注入到其他对象中。这种方式需要编写大量的样板代码,而且在应用程序的规模变大时,维护和管理这些依赖关系会变得非常复杂。而SpringBoot的自动装配可以通过条件化配置和自动发现机制,根据项目依赖和类路径信息自动配置应用程序,简化开发者的配置工作,提供零配置的开发体验,同时兼具灵活性和可扩展性,帮助开发者快速搭建并部署应用程序。

在SpringBoot中,自动装配是通过注解来实现的。

SpringBoot自动装配核心注解:

SpringBoot中涉及到自动装配的注解有:@SpringBootApplication@EnableAutoConfiguration@ComponentScan

@SpringBootApplication:

用于标识主启动类,整合了@Configuration、@EnableAutoConfiguration和@ComponentScan的功能。

@EnableAutoConfiguration:

实现SpringBoot自动装配的核心注解,用于启用Spring Boot的自动配置机制,根据类路径和项目依赖自动配置应用程序。

@ComponentScan:

扫描指定包及其子包下的组件,将其注册为Spring Bean。

结合源码分析:

要分析SpringBoot自动装配源码,就要重点关注其核心注解@EnableAutoConfiguration

该注解位于@SpringBootApplication中

通过翻阅源码我们可以看到

uTools_1713604197797

这个注解import了一个叫做AutoConfigurationImportSelector的类,这个类就是实现自动装配的核心,我们进入这个类分析它的源码:

这个类有一个核心方法叫做selectImports(),我们需要重点关注这个方法。

uTools_1713604610436

我们可以看到这个方法做的具体的工作就是把元数据通过getAutoConfiguration()转化为一个Entry对象,这个Entry对象存放着自动配置的条目或条目集合,我们看看它是如何生成的:

uTools_1713605313192

image-20240420173231016

getAutoConfiguration()主要是通过getCandidateConfigurations()来获取所有需要自动装配的类的全限定类名,具体是通过classLoader去扫描并获取每个Jar包下的META-INF/spring.factories里的内容。

SpringBoot获取到这些全类名后就会经过一系列处理并最终实例化加载到IOC容器中。

总结:

@SpringBootApplication复合注解-->@EnableAutoConfiguration复合注解

@EnableAutoConfiguration注解中导入(@Import({AutoConfigurationImportSelector.class}))注解

AutoConfigurationImportSelector类selectImports()方法-->getAutoConfigurationEntry()方法-->getCandidateConfigurations()方法

getCandidateConfigurations借助SpringFactoriesLoader.loadFactoryNames()扫描META-INF/spring.factories的jar包,把扫描到的全类名进行实例化加载到IOC容器中

  • 53
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值