简单清晰的SpringBoot自动装配原理


前言

SpringBoot自动装配原理是面试中的难点,如果不抓住重点直接看源码很可能会迷失方向。本章结合SpringBoot源码,带大家剖析一下SpringBoot自动装配原理,希望能给读者带来帮助。


一、@SpringBootApplication

SpringBoot的自动装配是指:SpringBoot会自动将一些配置类的bean注册到ioc容器,我们可以在需要的地方使用@Autowired或@Resource等注解来使用它。

@SpringBootApplication注解是SpringBoot的核心注解,它其实是一个组合注解,包括三个注解,按住Ctrl+鼠标左键,进入注解内部。
在这里插入图片描述
在这里插入图片描述

从上图可以发现@SpringBootApplication这个注解是由@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan注解组成,接下来逐一介绍每个注解的功能。


二、@SpringBootConfiguration注解

首先我们来看一下@SpringBootConfiguration注解,进入内部,发现@SpringBootConfiguration这个注解的本质就是@Configuration注解。而@Configuratin注解是Spring框架提供的,表示当前类是一个配置类。在这里插入图片描述

注意:@SpringBootConfiguration注解和 @Configuratin注解都是标识一个可以被组件扫描器扫描的配置类,只不过前者是被Spring Boot进行了重新的命名和封装。


三、@EnableAutoConfiguration注解

进入@EnableAutoConfiguration,发现其也是一个组合注解,由@AutoConfigurationPackage和
@Import({AutoConfigurationImportSelector.class})注解组成。
在这里插入图片描述

3.1@AutoConfigurationPackage注解

1.该注解上有一个@Import(AutoConfigurationPackages.Registrar.class)注解,点击Registrar进入内部
在这里插入图片描述
2.registerBeanDefinitions()方法
在这里插入图片描述
从上图可以看出@AutoConfigurationPackage注解的作用就是获取项目启动类的根目录,从而指定后续组件扫描器要扫描的包位置。因此这就是为什么将controller、service等包放在启动类的同级目录下的原因。

3.2@Import({AutoConfigurationImportSelector.class})注解

1.点击AutoConfigurationImportSelector进入内部
在这里插入图片描述
2.getAutoConfigurationEntry(AnnotationMetadata annotationMetadata)方法
在这里插入图片描述


四、@ComponentScan注解

一个组件包扫描器,用于将指定包中的注解类自动装配到Spring的Bean容器中。
在这里插入图片描述
@ComponentScan注解具体扫描的包的根路径由Spring Boot项目启动类所在包位置决定,在扫描过程中,
由@AutoConfigurationPackage注解进行解析,从而得到Spring Boot项目启动类所在包的具体位置。


总结

@SpringBootApplication本质:三个注解的整合,三个注解的功能以及结构如下图所示。
在这里插入图片描述


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JinziH Never Give Up

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值