当前位置: 首页 > news >正文

SpringBoot自动化配置原理

Spring Boot 的自动化配置原理基于 @EnableAutoConfiguration 注解及其相关机制。以下是其工作原理的详细说明:

Spring Boot 自动化配置原理

主要概念和机制

  1. @EnableAutoConfiguration 注解

    • 这个注解告诉 Spring Boot 启动时去自动配置 Spring 应用程序上下文,尝试基于 classpath 中的依赖、已经定义的 bean 以及各种属性配置文件来猜测你需要的 bean 并配置它们。
  2. spring.factories 文件

    • META-INF/spring.factories 文件中定义了自动配置类的列表。Spring Boot 在启动时会读取这个文件,并加载其中列出的所有配置类。
  3. 条件注解(Conditional Annotations)

    • Spring Boot 使用大量的条件注解(如 @ConditionalOnClass@ConditionalOnMissingBean@ConditionalOnProperty 等)来控制自动配置的条件。这些注解帮助 Spring Boot 决定是否应该创建特定的 bean 或执行特定的配置。

自动配置的工作流程

  1. 引导阶段

    • Spring Boot 启动时,通过 SpringApplication.run() 方法引导应用程序。
  2. 启用自动配置

    • @SpringBootApplication 注解是一个组合注解,包含了 @EnableAutoConfiguration
    • @EnableAutoConfiguration 通过 AutoConfigurationImportSelector 类来实现,它会自动导入所有在 spring.factories 文件中定义的自动配置类。
  3. 加载自动配置类

    • AutoConfigurationImportSelector 查找 META-INF/spring.factories 文件,并读取所有 org.springframework.boot.autoconfigure.EnableAutoConfiguration 属性下的配置类。
    • 将这些配置类加载到 Spring 应用上下文中。
  4. 条件注解的评估

    • 在加载每个自动配置类之前,Spring Boot 会评估配置类上的条件注解(如 @ConditionalOnClass 等)。
    • 只有在所有条件都满足的情况下,配置类中的配置才会生效。例如,@ConditionalOnClass 会检查指定的类是否存在于 classpath 中。
  5. 配置 Bean

    • 自动配置类通过 @Configuration 注解定义,并包含多个 @Bean 方法。
    • 当自动配置类被加载时,这些 @Bean 方法会被执行,注册相应的 bean 到 Spring 容器中。

示例

以下是一个简单的 spring.factories 文件示例:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.MyAutoConfiguration

和对应的自动配置类:

package com.example;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;@Configuration
@ConditionalOnClass(SomeRequiredClass.class)
public class MyAutoConfiguration {@Bean@ConditionalOnMissingBeanpublic MyService myService() {return new MyServiceImpl();}
}

自定义自动配置

如果你需要自定义自动配置类,可以按照以下步骤:

  1. 创建配置类

    • 定义一个新的配置类,使用 @Configuration 注解并包含 @Bean 方法。
  2. 添加条件注解

    • 根据需要使用各种条件注解来控制配置类的加载。
  3. 注册自动配置类

    • 在 META-INF/spring.factories 文件中注册新的自动配置类。

总结

Spring Boot 的自动化配置利用 @EnableAutoConfiguration 注解及其背后的机制(包括 spring.factories 文件和条件注解)实现了在应用启动时自动装配 bean。通过这种方式,开发者可以专注于业务逻辑,而无需手动配置各种基础设施组件。

相关文章:

  • Cortex-M3的SysTick 定时器
  • linux文件权限常用知识点,基于Linux(openEuler、CentOS8)
  • 基于Rsoft的Fullwave仿真模块进行双芯波导能量耦合与波分复用
  • Java 18 新特性详解
  • 后量子密码解决方案
  • 5.Redis之常用数据结构单线程模型
  • Java整合ELK实现日志收集 之 Elasticsearch、Logstash、Kibana
  • 为 AWS 子账户添加安全组修改权限
  • 深入探索SQL注入:盲注技术及其防御策略
  • 程序员做副业要知道重点在哪里
  • 区间预测 | Matlab实现DNN-KDE深度神经网络结合核密度估计多置信区间多变量回归区间预测
  • 永久代你不知道的东西
  • 哈希表---闭散列
  • colmap在windows上编译好的程序直接可以运行支持cuda
  • Spring是怎么处理循环依赖的
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • Angular Elements 及其运作原理
  • DataBase in Android
  • GitUp, 你不可错过的秀外慧中的git工具
  • iOS | NSProxy
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JS数组方法汇总
  • Less 日常用法
  • Python 反序列化安全问题(二)
  • spring security oauth2 password授权模式
  • 对象引论
  • 简单实现一个textarea自适应高度
  • 解析 Webpack中import、require、按需加载的执行过程
  • 三分钟教你同步 Visual Studio Code 设置
  • 异步
  • 用jQuery怎么做到前后端分离
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (10)STL算法之搜索(二) 二分查找
  • (3)(3.5) 遥测无线电区域条例
  • (笔试题)分解质因式
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (规划)24届春招和25届暑假实习路线准备规划
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • **CI中自动类加载的用法总结
  • .net 发送邮件
  • .net 简单实现MD5
  • .Net7 环境安装配置
  • .netcore如何运行环境安装到Linux服务器
  • .NET成年了,然后呢?
  • .Net程序帮助文档制作
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器