SpringBoot自动配置原理

1.思考

上一篇文章《由浅入深了解SpringBoot框架中的Bean注册》,演示了在SpringBoot工程中,添加自定义的第三方依赖(如图)。本文我们讲解的是SpringBoot自动配置原理,那么,引入自定义依赖的bean,它自动配置了吗?
在这里插入图片描述
在这里插入图片描述

2.现象

显然,在引入自定义依赖后,要手动添加配置文件,用@Import引入配置文件后,Bean才能被使用。因此,自定义依赖的bean并没有被自动配置。
我们再来看,引入的第三方依赖如果不是自定义的,会是什么情况。
本次引入web的起步依赖,测试能不能直接得到web依赖中的DispatcherServlet类

2.1.创建SpringBoot工程,导入web依赖

在这里插入图片描述

2.2.测试,获取DispatcherServlet类,可直接获取

在这里插入图片描述
由此可知,SpringBoot对引入的web依赖的bean进行了自动配置。接下来,我们来追溯SpringBoot自动配置原理。

3.原理分析

3.1.从主启动类的注解@SpringbootApplication点进去

在这里插入图片描述

3.2.可以看到这是一个组合注解,顾名思义找到自动装配的注解@EnableAutoConfiguration,点进去

在这里插入图片描述

3.3.这一步可以看到一个熟悉的注解,在《由浅入深了解SpringBoot框架中的Bean注册》的文章中,Bean注册优化到最后一种形式,就是我们现在看到的@Import({AutoConfigurationImportSelector.class})注解。不出意料,这个类应该实现了ImportSelector接口。点进去看看。

在这里插入图片描述

3.4.看到这个类实现了DeferredImportSelector接口(该接口继承了ImportSeletor接口)。找到重写的方法selectImports,方法中返回了一个配置类的数组,找到获取配置的方法,点进去

在这里插入图片描述

3.5.继续找源头,点进去

在这里插入图片描述

3.6.这一行的断言,提示从META-INF/spring.factories中找配置类的全路径

在这里插入图片描述

3.7.找到依赖下的该文件,点进去

在这里插入图片描述

3.8.可以搜索到DispatcherServlet的配置类,点进去

在这里插入图片描述

3.9. 找到DispatcherServlet注册Bean的源码啦

在这里插入图片描述

4.Spring版本差异

最后分析找到存放配置类全路径的文件,存放在.factories的文件中。在Spring2.7之前,是.factories文件,在2.7版本之后,存放在.imports的文件中

5.面试题:说一说SpringBoot配置原理

在主启动类上添加了SpringBootApplication注解,这个注解组合了EnableAutoConfiguration注解
EnableAutoConfiguration注解又组合了Import注解,导入了AutoConfigurationImportSelector类
实现selectImports方法,这个方法经过层层调用,最终会读取META-INF 目录下的 后缀名 为imorts的文件,当然了,boot2.7以前的版本,读取的是spring.factories文件,
读取到全类名了之后,会解析注册条件,也就是@Conditional及其衍生注解,把满足注册条件的Bean对象自动注入到IOC容器中

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值