springboot自动装配原理(通俗易懂)

简介: springboot自动装配原理(通俗易懂)

@SpringBootApplication

首先在springboot的启动类上有这么一个注解,我们点进去可以看到以下三个核心注解

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
    @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })

1、@SpringBootConfiguration

这个注解点进去我们可以看到@Configuration,表名当前类是一个配置类

2、@ComponentScan

指定扫描哪些,是spring的一个注解

3、@EnableAutoConfiguration(重要)

我们点进来这个注解可以看到有以下注解,我们进行一一探究

@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)// 给容器导入一个组件
public @interface EnableAutoConfiguration {}

3.1、@AutoConfigurationPackage

我们点开这个注解可以看到如下注解,

@Import(AutoConfigurationPackages.Registrar.class)// 给容器导入组件
public @interface AutoConfigurationPackage {}

点开Registrar,如图

我们可以看到有这么一个方法,该方法表示把指定包下的所有组件都导入进来,这个包就是我们启动类所在的包名,我们可以debug一下,如图

这也就解释了一个事情,组件如果不在一个包下,无法扫描到的问题

所以该注解就是自动配置包,指定了包的默认规则

3.2、@Import(AutoConfigurationImportSelector.class)

继续点进去,我们可以看到这么一个方法selectImports(给容器批量导入一些组件)

调用了getAutoConfigurationEntry方法,我们来研究一下这个方法

我们可以看到里面有一个配置的集合,我们打一个断点看看集合里面都是什么配置,debug一下

可以看到,List集合里面都是一些需要导入到组件中的配置类,那么问题来了,这些配置类时如何获取的呢,我们观察这个图中的这行代码:

打开getCandidateConfiguration方法,

该方法调用了一个工厂加载器,点开loadFactoryNames方法:

进入loadSpringFactories方法:

可以看到这个方法会扫描META-INF/spring.factories位置下的所有文件

这个文件我们可以在spring-boot-autoconfigure-2.5.4.jar里面找到

所有的自动配置类都在里面,最终会根据条件配置规则,按需配置。


目录
相关文章
|
1天前
|
安全 Java 数据安全/隐私保护
SpringBoot实现二维码扫码登录的原理与详细步骤
SpringBoot实现二维码扫码登录的原理与详细步骤
120 1
|
1天前
|
XML Java 开发者
Spring Boot中的bean注入方式和原理
Spring Boot中的bean注入方式和原理
127 0
|
1天前
|
缓存 Java Maven
Spring Boot自动配置原理
Spring Boot自动配置原理
52 0
|
1天前
|
NoSQL Java 测试技术
字节二面:Spring Boot Redis 可重入分布式锁实现原理?
字节二面:Spring Boot Redis 可重入分布式锁实现原理?
178 1
|
1天前
|
消息中间件 存储 安全
RabbiMQ原理与SpringBoot使用
RabbiMQ原理与SpringBoot使用
40 0
|
1天前
|
前端开发 搜索推荐 Java
【Spring底层原理高级进阶】基于Spring Boot和Spring WebFlux的实时推荐系统的核心:响应式编程与 WebFlux 的颠覆性变革
【Spring底层原理高级进阶】基于Spring Boot和Spring WebFlux的实时推荐系统的核心:响应式编程与 WebFlux 的颠覆性变革
|
1天前
|
XML Java 开发者
springboot 启动原理、启动过程、启动机制的介绍
【5月更文挑战第13天】Spring Boot 是一种基于 Java 的框架,用于创建独立的、生产级别的 Spring 应用程序。它的主要目标是简化 Spring 应用的初始搭建和开发过程,同时提供一系列大型项目常见的非功能性特征(如嵌入式服务器、安全性、度量、健康检查和外部化配置)。
18 3
|
1天前
|
XML Java 数据库
【SpringBoot:详解Bean装配】
【SpringBoot:详解Bean装配】
10 3
|
1天前
|
Java
SpringBoot之@Conditional衍生条件装配详解
SpringBoot之@Conditional衍生条件装配详解
|
1天前
|
Java Spring 容器
SpringBoot自动装配原理之@Import注解解析
SpringBoot自动装配原理之@Import注解解析
53 0