SpringBoot自动装配原理

原文链接----------------------

@SpringBootApplication这个注解由好多注解组成

主要的有以下三个:

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan

先来看第一个:@SpringBootConfiguration
进入这个注解之后会发现
在这里插入图片描述原来你就是一个@Configuration啊,一个JavaConfig配置类

那我们使用JavaConfig不就是用来配置bean吗,所以有了这个注解之后我们可以在SpringBoot运行的主类中使用@Bean标签配置类了

第二个:@ComponentScan
组件扫描
这个扫描的范围是:SpringBoot主启动类的同级路径及子路径
在这里插入图片描述

第三个: @EnableAutoConfiguration
来看这个注解,也是最核心的内容

进入@EnableAutoConfiguration:
在这里插入图片描述这里的作用便是导入了 AutoConfigurationImportSelector 这个类的bean定义

我们都知道,如果这个类实现了ImportSelector接口,那他肯定重写了一个方法,就是我们上面重写过的selectImports方法:

果然,在这个类里面确实有这个selectImports方法:

在这里插入图片描述这个类我们当时返回的是什么?是一个字符串数组String[ ],那这个类无论多么长,返回的肯定就是一个字符串数组,不信你自己看:

在这里插入图片描述
这个字符串数组存放的内容我们是否清楚呢?当然清楚了!我们返回的是要加载的Config配置文件的全包名,通过返回这个全包名,我们就能自动装配上这些配置文件下定义的bean对象,从而达到了自动装配的目的!

根据刚才我们自己实现的selectImports方法,我们是通过注解类的名字来查找,并且最终得到需要加载的Config类的全类名,最后返回的。

因此,这里必然有一个根据注解类名字来查找相应的Config文件的操作

在这里插入图片描述
我们发现autoConfigurationEntry中保存着我们需要的配置信息,它是通过getAutoConfigurationEntry方法获取的,于是我们继续深入,进入getAutoConfigurationEntry方法
在这里插入图片描述
如果你还记得的话,我们自己写的工具类里面也是一个静态方法readPropertyForMe来帮我读取配置文件

但是我们的配置文件路径一定是需要指定的,不能乱放。

从loadFactoryNames方法体来看,好像没有给他传递一个具体路径
在这里插入图片描述那我们大概就知道了,他确实是通过找到路径,然后根据路径读取了配置文件,然后返回了读取的result
这就是loadFactoryNames方法的内部实现。

原来如此。

这里的EnableAutoConfiguration注解,正是我们此行的起点啊…

-----到这里,自动装配到底是什么,应该比较清楚了,原来他是帮我们加载了各种已经写好的Config类文件,实现了这些JavaConfig配置文件的重复利用和组件化--------

总结:

在这里插入图片描述
Spring Boot自动装配详细流程图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值