聊一聊 SpringBoot 自动配置的原理

简介: 聊一聊 SpringBoot 自动配置的原理

解析思路

我们建立好一个SpringBoot的工程后,我们将从启动类,SpringBootApplication开始进行探究。

开始解析

首先我们建立一个 Springboot的工程。找到启动类,我们看到启动类上有一个注解@SpringBootApplication。我们从这开始。

我们通过idea点进去看看

这是两个关键的注解,我们先来看一下@SpringBootConfiguration里面是个啥。

发现就是个普通的@Configuration注解,至此,破案。
我们要重点来看@EnableAutoConfiguration注解。这个注解可以说是SpringBoot实现自动配置的关键。
点进去看一下,发现他引入了这么一个class类,顺嘴提一下,这个import注解关键啊。他这个注解就是类似,我们将多个xml文件写入到一个xml文件中的情况。所以我们得看看他这个都导入了什么。继续点击,AutoConfigurationImportSelector进去看看

来到AutoConfigurationImportSelector类中。
我们首先来看他重写的方法selectImports。

两个方法,loadMetadata和getAutoConfigurationEntry
我们先看loadMetadata,loadMetadata 打了个断点看了一下,大致就是说去找spring-autoconfigure-meatadata.properties。
将这个配置文件搞成一个配置文件类,返回。这个配置文件中存在的东西就是自动配置类的对应关系。
第二个方法getAutoConfigurationEntry

这里面又继续调用了这个方法

这个loadFactoryNames方法所进行的事,就是去查找META-INF/spring.factories文件中包含的JAR文件。

spring.factories在org.springframework.boot.autoconfigure的jar下

进去发现,里面有各种各样的自动配置类。

回到之前的selectImports的方法,返回的是一个数组,将这些类文件以数组形式返回。这样我们的之前在spring.factrory里面看到的那些自动配置类就全部加载到容器中了。
容器中有了这些类,我们自然是来看看这些类中都有什么东西。拿我们比较熟悉的DataSource来说。我们进入DataSourceAutoConfiguration。

圈出来的是比较重要的注解
Configuration:用来告诉容器这是一个配置类,需要加载
ConditionalOnClass:这个是自动配置里的又一个关键注解。这个注解的含义是进行条件判断。如果包含其中的类,才可以正常加载,如果不存在该类,则不加载。
EnableConfigurationProperties:开启注解ConfigurationProperties。这个注解,将其中的类,与当前的类,进行绑定,也就是说当前类可以读取绑定类的配置。我们点进去看一下。

@ConfigurationProperties(prefix = "spring.datasource")代表我们在 application.yml或properties中对他进行配置的前缀。下面的属性就是该类的配置的key。了解了这一层之后,我们想配东西的时候,但是不知道配什么的时候,直接按照此思路来看即可。
当我们的条件注解都判定成功之后,该配置类里面的配置就会生效。有的配置类里面会有@bean注解,这种直接将实体放入了容器中,实现了自动配置。
至此自动配置原理结束。

相关文章
|
2月前
|
安全 Java 数据安全/隐私保护
SpringBoot实现二维码扫码登录的原理与详细步骤
SpringBoot实现二维码扫码登录的原理与详细步骤
103 1
|
2月前
|
XML Java 开发者
Spring Boot中的bean注入方式和原理
Spring Boot中的bean注入方式和原理
86 0
|
3月前
|
缓存 Java Maven
Spring Boot自动配置原理
Spring Boot自动配置原理
50 0
|
4月前
|
NoSQL Java 测试技术
字节二面:Spring Boot Redis 可重入分布式锁实现原理?
字节二面:Spring Boot Redis 可重入分布式锁实现原理?
164 1
|
4月前
|
消息中间件 存储 安全
RabbiMQ原理与SpringBoot使用
RabbiMQ原理与SpringBoot使用
39 0
|
2月前
|
前端开发 搜索推荐 Java
【Spring底层原理高级进阶】基于Spring Boot和Spring WebFlux的实时推荐系统的核心:响应式编程与 WebFlux 的颠覆性变革
【Spring底层原理高级进阶】基于Spring Boot和Spring WebFlux的实时推荐系统的核心:响应式编程与 WebFlux 的颠覆性变革
|
11天前
|
Java Spring 容器
SpringBoot自动装配原理之@Import注解解析
SpringBoot自动装配原理之@Import注解解析
53 0
|
14天前
|
JSON Java Maven
Javaweb之SpringBootWeb案例之 SpringBoot原理的详细解析
Javaweb之SpringBootWeb案例之 SpringBoot原理的详细解析
42 0
Javaweb之SpringBootWeb案例之 SpringBoot原理的详细解析
|
27天前
|
Java 容器 Spring
Springboot自动配置原理
Springboot自动配置原理
|
2月前
|
Java API 开发者
springboot 多线程的使用原理与实战
在Spring Boot中实现多线程,主要依赖于Spring框架的@Async注解以及底层Java的并发框架。这里将深入剖析Spring Boot多线程的原理,包括@Async注解的工作方式、任务执行器的角色以及如何通过配置来调整线程行为。
44 5