Springboot自动装配的原理之源码讲解

Springboot自动装配的原理

一、springboot是如何实现自动装配的呢 ?

1、@SpringBootApplication注解

首先我们得看源码,springboot类中有一个注解@SpringBootApplication,这是一个组合注解。我们点击进去看一下:
图1:
在这里插入图片描述

图2:点进去之后可以看到如下图
在这里插入图片描述

(1) 第一类: JDK原生注解4个

@Target(ElementType.TYPE) //当前注解的使用范围
@Retention(RetentionPolicy.RUNTIME) //生命周期
@Documented //声明在生成doc文档时是否带着注解
@Inherited //声明是否子类会显示父类的注解

@SpringBootApplication中有3个主要注解

1.@SpringBootConfiguration //表示该类是一个配置类
2.@ComponentScan //包扫描,扫描启动类所在的包与启动类所在的子包
3.@EnableAutoConfiguration //开启自动装配

2、@EnableAutoConfiguration

@EnableAutoConfiguration这个注解是开启自动装配的注解核心,它的作用就是获取配置类,扫描并注入IOC容器中管理,它也是一个组合注解。我们点进去看源码。
图3:
在这里插入图片描述

我们可以看到**@Import({AutoConfigurationImportSelector.class})** 导入AutoConfigurationImportSelector.class这个类,这里面有一个selectImports方法里面调用了getCandidateConfigurations方法去加载META-INF/spring.factories文件。
图4:进入AutoConfigurationImportSelector类可看到selectImports方法
在这里插入图片描述

图5:点击getAutoConfigurationEntry方法进入可看到getCandidateConfigurations
在这里插入图片描述

图6:从这里可以看到getCandidateConfigurations加载了META-INF/spring.factories文件
在这里插入图片描述

3、META-INF/spring.factories是用来干嘛的?

该文件是定义了springboot自动装配的框架自动装配类

图7:

在这里插入图片描述

怎么确认自动装配类不会把所有的装配类加载进来呢?这个时候我们点进去RedisAutoConfiguration这个装配类,可以看到@ConditionalOnClass(RedisOperations.class),也就是说有这个类在内存中,这个类才会被加载。
图8:
在这里插入图片描述

4、这个类在哪里呢?怎么样才会被自动装配加载?

一旦导入这个类的启动器,那么就会被自动装配加载。
图9:
在这里插入图片描述

总结:Spring Boot启动的时候会通过@EnableAutoConfiguration注解找到META-INF/spring.factories配置文件中的所有自动配置类,并对其进行加载,而这些自动配置类都是以AutoConfiguration结尾来命名的。通过SpringFactoriesLoader机制创建对应的bean,注入到容器中,完成了自动注入spring容器,本来需要在spring的xml配置文件中去配置bean的操作就免去了 ,也就是springboot完成了自动装配。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值