springboot自动配置原理

在spring-boot中,只要我们引入了相关的启动类,就会自动注入到spring的ioc容器中,那么它是怎么实现的呢?
首先,先讲讲@Condition这个注解,Conditional 是在spring4.0 增加的条件注解,当你注册bean时,可以对这个bean添加一定的自定义条件,当满足这个条件时,注册这个bean,否则不注册。
在springboot的配置类中,使用了这个注解,下面我照着源码讲。
在这里插入图片描述
springboot整合了很多类的配置,下面我讲讲其中的redis的自动配置原理,
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210125111059269.png
打开这个配置类,可以看到:
在这里插入图片描述
注入的时候使用了@ConditionalOnMissingBean注解,这个注解是什么意思呢?我们再点开来看看,
在这里插入图片描述
原来,就是一个复合注解而已,原理还是使用了spring的Conditional。关与注解原理请看@ConditionalOnMissingBean
这个注解的作用大概是:判断spring容器中有没有该Bean,没有就会注入到容器中。
配置类是搞定了,那么springboot是怎么加载它的呢?
我们可以从springboot的启动类入手,启动类都要加上这个@SpringBootApplication我想应该会在这里面加载配置类。我们点开来看看,与配置相关的注解就两个:
在这里插入图片描述
我们一个一个点开,发现@EnableAutoConfiguration能找到我们想要的东西:
在这里插入图片描述
向spring容器中注入bean有很多种方式,详细请看:https://blog.csdn.net/weixin_43941364/article/details/107243459
很明显用的是“导入ImportSelector实现类”这个方式向spring种注入bean。
在这里插入图片描述
再来看看这个接口。在这里插入图片描述
只有一个方法,那么事情就变得简单起来,去找这个抽象方法的实现方法就行了。
在这里插入图片描述
点进去看看。
在这里插入图片描述
通过返回值我们可以大概判断应该是getCandidateConfigurations这个方法拿到了配置信息集合:
我们进去再看看。
在这里插入图片描述
其实从断言中已经大概可以确定了,是在META-INF/spring.factories配置了需要加载的配置类。我们继续看看loadFactoryNames这个方法确定一下。
在这里插入图片描述
再来看看这个方法,在这里插入图片描述
看到那几个全是大写的常量,真相就大白了。在这里插入图片描述
我们再去看看这个配置文件。
在这里插入图片描述
在这里插入图片描述
到这里整个流程就清楚了。

总结:

springboot自动配置可以分为以下几个简单的步骤:
1.写好配置类。例如:RedisAutoConfiguration
2.在配置文件中META-INF/spring.factories配置这个这个类的全限定名。
3.@SpringBootApplication注解中的@EnableAutoConfiguration中的@Import(AutoConfigurationImportSelector.class)中的AutoConfigurationImportSelector这个类加载配置文件META-INF/spring.factories中RedisAutoConfiguration的全限定名,然后注入到spring中。
ps:第三点有点套娃的感觉,大概这就是框架把。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值