Spring Boot自动装配原理

实例:

  1. 引入依赖

    java 复制代码
    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
  2. 配置服务器

  3. redis自动装配

原理:

一切都源于一个关键的注解:

@SpringBootApplication

从下图可以看到, @SpringBootApplication的几个核心注解

@EnableAutoConfiguration:

实现自动配置的关键就在于@EnableAutoConfiguration这个注解:

它通过导入@Import(AutoConfigurationImportSelector.class)来实现自动配置

如何实现 AutoConfigurationImportSelector呢?

核心逻辑
  1. 配置文件位置:

    • META-INF/spring.factories 文件位于 classpath 中。

    • 每个 Jar 包都可以提供自己的 spring.factories 文件。

  2. 文件格式:

    • 文件内容是 key=value1,value2,...valueN 的格式。

    • key 是指定的接口或抽象类的全限定名。

    • value 是实现类或具体类的全限定名,多个类名用逗号分隔。

  3. 加载机制:

    • Spring 使用 SpringFactoriesLoader 类加载 spring.factories 文件。

    • 通过 ClassLoader 读取 classpath 中的所有 spring.factories 文件。

    • 根据指定的 key 解析出对应的 value,并返回类名的集合。

实现流程:

这里我总结一下AutoConfigurationImportSelector的实现流程:

  1. AutoConfigurationImportSelector.selectImports(......)。
  2. 通过SpringFactories机制加载配置文件:通过ClassLoader去获取classpath中的配置文件META-IF/spring.factories。
  3. 找出所有的自动配置类:在所有的配置文件META-IF/spring.factories中,筛选出以EnabkeAutoConfiguration.class为key的,符合条件的配置类。
  4. 根据注解@Conditional过滤掉不必要的自动配置类:注解@Conditional,提供了一种灵活的过滤机制。

总结,自动装配流程:

还是以redis为例:

相关推荐
Sarvartha1 分钟前
Object 类
java·开发语言
知守观4 分钟前
feign-core 就在依赖树里,运行时却找不到类:一次 provided scope 引发的启动失败排查
java·spring cloud·maven
她的男孩4 分钟前
企业接口照样拦得住:独立 Flyway、@RequiresFeature 与离线许可证
java·spring boot·后端
十年Java程序媛5 分钟前
Lambda 与函数式接口|别只会复制 ()->{},底层规则和坑一次性讲清
java·spring boot·后端
yunwei376 分钟前
eBPF 入门开发实践教程一:Hello World,基本框架和开发流程
linux·后端·性能优化
全栈Agent 小李10 分钟前
【无标题】
前端·后端·agent·ai编程·全栈·cursor·mcp
高频因子挖掘机12 分钟前
历史 K 线突然少一天?用交易日历、停牌信息和数据校验逐步排查
后端·github·api
Nozokime13 分钟前
ThreadLocal 在流式 Agent 里静默失效:LangChain4j 轨迹埋点的零侵入方案
java
小宋102117 分钟前
OpenTelemetry GenAI可观测性实战:串起模型、工具、Token与错误
java·人工智能·算法·贪心算法
m0_5873830035 分钟前
工业场景设备维修维护实战技巧 全流程标准化落地与常见问题排查指南
java·spring·小程序·架构·需求分析