浅谈【SpringBoot】 自动配置底层原理!

SpringBoot框架之所以如此好用,源于其提供了两个非常重要的功能:
起步依赖自动配置

1.起步依赖

起步依赖一般有两种:

一种是官方提供的起步依赖:类似于 spring-boot-xxx 这种
在这里插入图片描述
另一种是非官方起步依赖:一般以自己公司名打头
在这里插入图片描述
如何判断是不是起步依赖:一般是有starter后缀

开发一个基于传统Spring项目繁琐复杂,需要手动导入大量所需依赖,还面临版本不兼容问题,导致报错。

而Spring起步依赖不仅自动导入所需要的相关间接依赖,还十!分!贴!心!配好版本,避免依赖冲突。

在这里插入图片描述
Spring会自动检测当前的依赖是否需要别的依赖的支持才能运行。

Maven依赖传递特性:可以将间接依赖引入直接依赖

起步依赖的本质:就是一个jar包,在内部已经封装了当前环境需要的依赖们,并且解决了版本冲突问题。原理上就是运用了Maven的依赖传递特性。

2.自动配置

在SpringBoot启动时会加载主配置类,主要是引导类的一个核心注解:@SpringBootApplication
在这里插入图片描述

让我们用脚点进去一探究竟,

发现@SpringBootApplication 其实是一个复合注解。

在这里插入图片描述
接下来就逐一介绍:

@SpringBootConfiguration

底层就是@Configuration注解,表示当前引导类也是一个配置类,配置类本身也会被注入IOC容器中,并且配置类一定被启动类扫描到。

在这里插入图片描述
@Configuration标注了一个配置类,并且具有组件扫描功能, 会扫描带@Bean注解的方法, 并将其加入到spring容器中.

一个类如果添加了@Configuration注解,那么这个类就是一个配置类。@Configuration底层还是@Component。
在这里插入图片描述

@ComponentScan

表示当前引导类所在的包会被进行组件扫描,只有被扫到了才能加入spring容器。给哪个类添加该注解,那么该类所在的包就是默认的扫描路径。

@EnableAutoConfiguration

是它,就是它——实现了自动配置

给我点进去
在这里插入图片描述
AutoConfigurationPackage注解的作用:
是将添加该注解的类所在的package作为自动配置package进行管理。

也就是说当SpringBoot应用启动时默认会将启动类所在的package作为自动配置的package。然后使用@Import注解将其注入到IOC容器,这样可以在容器中拿到该路径。

点进去AutoConfigurationImportSelector
在这里插入图片描述
其中 Registrar 类的作用:

是将启动类所在包下的所有子包的组件扫描注入到spring容器中。

在这里插入图片描述
@Import(AutoConfigurationImportSelector.class)
使用Import自动导入所有符合自动配置条件的Bean定义并加载到IOC容器。

这个类会自动去执行会自动执行 SelectImports方法。SelectImports方法最终会调用SpringFactoriesLoader的LoadFactoryNames方法。而这个方法会加载 AutoConfiguration 包下的META-INF目录spring.factories文件中的所有的数据,将其所有的值封装成一个字符串数组。

最终Spring容器会根据起步依赖以及@Conditional相关注解进行过滤,将满足条件的字符串数组内部封装的全类名通过反射的方式创建对象并注入到容器中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值