[SpringBoot] 自动装配原理分析

什么是自动装配

我们在使用SpringBoot的时候,SpringBoot会自动帮我们进行如下配置:

  1. 自动配置好Tomcat
  2. 自动配置好SpringMVC
  3. 自动配置好Web常见功能,如字符编码问题
  4. 默认的包结构
  5. 各种配置拥有默认值
  6. 按需加载所有自动配置项等等

自动装配原理分析

@SpringBootApplication

首先找到 SpringBoot 的主启动类,在这个主启动类上存在有一个 @SpringBootApplication 的注解,SpringBoot 通过这个注解来说明这个类是主启动类,然后通过执行类中的main方法来启动 SpringBoot 项目
在这里插入图片描述
在main方法里面会执行一个run方法,它会使用一个默认的配置来启动SpringApplication程序
在这里插入图片描述
然后看一下注解@SpringBootApplication究竟做了什么,它主要有如下两个重要注解:

  1. @SpringBootConfiguration
  2. @EnableAutoConfiguration
    在这里插入图片描述

@SpringBootConfiguration

在@SpringBootConfiguration中,有这样一个注解**@Configuration**
在这里插入图片描述
点开 @Configuration 注解,我们发现,它实际上就是一个 @Component 注解,代表它是 SpringBoot 的一个组件,代表它是一个配置类
因此, @Configuration 注解仅代表其是一个配置类,类似的有:
在这里插入图片描述
在这里插入图片描述

@EnableAutoConfiguration

点开 @EnableAutoConfiguration 注解,我们发现除了元注解外,它主要有两个注解:

  1. @AutoConfigurationPackage
  2. @Import(AutoConfigurationImportSelector.class)
    在这里插入图片描述
@AutoConfigurationPackage

先来看 @AutoConfigurationPackage 注解,点开它,我们发现主要的注解是@Import(AutoConfigurationPackages.Registrar.class)

事实上,@Import就是给容器中导入组件,@Import(AutoConfigurationPackages.Registrar.class)就是给容器中导入Registrar组件
在这里插入图片描述
@Import(AutoConfigurationPackages.Registrar.class)通过import注解导入了一个AutoConfigurationPackages下的一个静态内部类Registrar,它的作用是给容器中批量注册组件
在这里插入图片描述
在Registrar类中,重写了方法registerBeanDefinitions,大概就是说注册定义的Bean,他要扫描的包是我们的主启动类,这时候就大概知道SpringBoot 就是通过这个注解来扫描主启动类下的包和子包下的所有组件并加载到 Spring 容器。

@Import(AutoConfigurationImportSelector.class)

点进这个注解,我们发现他重写了selectImports方法
在这里插入图片描述
而在selectImports方法中,它又调用了getAutoConfigurationEntry方法
在这里插入图片描述
当走完getCandidateConfigurations时,它会加载很多configurations,这些都是自动配置类的全限定名
在这里插入图片描述让我们来梳理一下现在已经知道的信息:SpringBoot 通过 @Import(AutoConfigurationImportSelector.class) 这个注解加载了我们 Spring 容器需要的所有配置类,可以知道这些配置类是通过getCandidateConfigurations()方法加载的,继续点进getCandidateConfigurations()方法在这里插入图片描述
下面通过一个SpringFactoriesLoader调用了一个loadFactoryNames方法,点进SpringFactoriesLoader我们发现有一个工厂资源地址
在这里插入图片描述
因此在getCandidateConfigurations()方法中,它通过SpringFactoriesLoader.loadFactoryNames方法扫描到META-INF/spring.factoriesjar包,并且将需要的自动配置包加载到 Spring 容器中在这里插入图片描述

找到这个工厂资源地址:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
发现这里面全部是全限定名,所以就是在这里找到了自动配置类并且加载到了 Spring 容器中,完成自动配置类的加载。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Cloudeeeee

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

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

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

打赏作者

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

抵扣说明:

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

余额充值