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

SpringBoot-自动配置-@Import注解与@EnableAutoConfiguration注解

  • @Import注解

  • @Enable* 底层依赖于 @Import 注解导入一些类,使用 @Import 导入的类会被 Spring 加载到 IOC 容器中
  • @Import 提供了4种用法:
    • 1.导入Bean
    • 2.导入配置类
    • 3.导入ImportSelector实现类;一般用于加载配置文件中的类
    • 4.导入ImportBeanDefinitionRegistrar实现类
  • @EnableAutoConfiguration注解

  • 可以看看Spring是如何使用@Import 注解的:
  • 进入引导类上的@SpringBootApplication 注解可以看到其注解依赖

  • @EnableAutoConfiguration 注解
  • 进入 @EnableAutoConfiguration 注解可以看到它使用了 @Import 注解导入了 AutoConfigurationImportSelector 这个自动配置的 Selector

  • 进入 AutoConfigurationImportSelector 之后可以找到 selectImports 方法,根据上文所述,这个方法返回了一个 String 类型的数组,数组中定义了很多需要被加载的类

  • 进入加载方法可以看到有一个getCandidateConfigurations方法会返回一个名为 configurations 的 List 集合,在下面的代码中根据条件筛选了这个集合并放入创建的 AutoConfigurationEntry 中返回

  • 进入 getCandidateConfigurations 可以看到他通过 SpringFactoriesLoader 加载了一些配置信息并返回了一个名为 configurations 的 List 集合
  • 下面的断言表示如果这个集合为空的,那么就会出现异常,大概意思为:“不能自动配置一个 claesses,在 META-INF 目录下的 spring.factories 文件下”,如果没有定义 spring.factories 这个文件,那么他就加载不到,加载不到就会出现断言

  • 接下来在 External Libraries 中找到 org.springframework.boot:spring-boot-autoconfigure:2.6.1 下的spring-boot-autoconfigure-2.6.1.jar -> META-INF -> spring.factories 并进入

  • 可以看到这个配置文件中有一个 key 为 org.springframework.boot.autoconfigure.EnableAutoConfiguration 的配置,其中配置了许多的 Configuration,那么这些 Configuration 将来都会被加载
  • 当然这些 Configuration 能否加载出来还得看他们的条件是否满足,比如可以找到前面讲到的 Redis,Redis 在当前配置文件中有一个 RedisAutoConfiguration

  • 进入 RedisAutoConfiguration 可以看到其中有一个 @ConditionalOnClass 条件注解,当这个注解里的条件被满足时,这个类中的 Bean 才会被创建

  • 当然不止这一个会有条件注解,再随便挑一个进去看看:
  • 在 KafkaAutoConfiguration 中同样定义了条件注解,当环境中存在 KafkaProperties 时,这个类中的 Bean 才会被加载

  • 小结:
  • @EnableAutoConfiguration 注解内部使用 @Import(AutoconfigurationImportSelector.class) 来加载配置类
  • 配置文件位置:META-INF/spring.factories
  • 该配置文件中定义了大量的配置类,当 SpringBoot 应用启动时,会自动加载这些配置类,初始化 Bean
  • 并不是所有的 Bean 都会被初始化,在配置类中使用 Condition 来加载满足条件的 Bean

相关文章:

SpringBoot-自动配置-@Import注解与@EnableAutoConfiguration注解

Import注解 Enable* 底层依赖于 Import 注解导入一些类,使用 Import 导入的类会被 Spring 加载到 IOC 容器中Import 提供了4种用法: 1.导入Bean2.导入配置类3.导入ImportSelector实现类;一般用于加载配置文件中的类4.导入ImportBeanDefinitio…...

【笔记】C#一维数组、多维数组和交错数组的区别总结

文章目录前言数组的概念1,一维数组:2,多维数组:3,交错数组:区别总结结语前言 😄大家好,我是writer桑, 这是自己整理的 C# 数组笔记,方便自己学习的同时分享出…...

【SpringBoot】分布式日志跟踪—通过MDC实现全链路调用日志跟踪

一.MDC 1.MDC介绍 MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j 和 logback 提供的一种方便在多线程场景下记录日志的功能。MDC 可以看成是一个与当前线程绑定的Map,可以往其中添加键值对。MDC 中包含的内容可以被同…...

【设计模式】创建型模式

简单工厂模式 系列综述: xxxxxxxxx 文章目录对象创建型模式简单(静态)工厂模式工厂方法模式参考博客😊点此到文末惊喜↩︎ 对象创建型模式 简单(静态)工厂模式 抽象原理 抽象产品基类 :定义了…...

Spark Catalyst 查询优化器原理

这里我们讲解一下SparkSQL的优化器系统Catalyst,Catalyst本质就是一个SQL查询的优化器,而且和 大多数当前的大数据SQL处理引擎设计基本相同(Impala、Presto、Hive(Calcite)等)。了解Catalyst的SQL优化流程&…...

贝叶斯分析法在市场调研中的应用

一、市场调研的需求场景 在营销活动的用研调研时,我们经常会去问用户在不同平台的品类付费情况,以对比大促期间本品和竞品分别在哪些品类上具有市场优势,他们之间的差距具体在哪里、差距有多大。假如根据调研问卷结果,我们知道拼多多用户有30%的人在大促购买生鲜类,而淘宝…...

JavaEE——MyBatis将查询结果集封装进POJO实体类

简单介绍 在之前的我们比较详细的介绍过MyBatis的配置信息的时候,在SQL映射文件中说过我们可以直接将结果集映射到我们的POJO实体类中,省去了我们自己处理查询结果集的时间和代码,接下来我们就来演示将单条数据和多条数据映射到我们POJO实体…...

C++11 包装器function

文章首发公众号:iDoitnow C提供了多个包装器,它们主要是为了给其他编程接口提供更一致或更合适的接口。C11提供了多个包装器,这里我们重点了解一下包装器function。 对于function, C 参考手册给出的定义为: 类模板 std::function…...

XCP实战系列介绍14-基于Vector_Davinci工具的XCP配置介绍(三)

本文框架 1.概述2. 其他模块配置2.1 XCP初始化3. 手工代码部分3.1 周期函数添加3.2 DAQ Event调用3.3 XCP模块本身代码3.4 标定量的添加1.概述 在对XCP的配置部分介绍中我们计划分别对通讯部分配置、XCP模块本身配置及其他相关模块配置三篇进行介绍,在前两篇我们介绍了XCP配置…...

计算机图形学:中点BH算法对任意斜率的直线扫描转换方法

作者:非妃是公主 专栏:《计算机图形学》 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 文章目录专栏推荐专栏系列文章序一、问题提出二、…...

(十一)、用户中心页面【uniapp+uinicloud多用户社区博客实战项目(完整开发文档-从零到完整项目)】

1,个人中心页面 1.1 新建个人中心页面 1.2 纯净版个人中心页面代码&#xff1a; <template><view class"user"><view class"top"><view class"group"><view class"userinfo"><!-- 顶部 左侧 头像 …...

LA@复数和复矩阵@实对称阵相关定理

文章目录复数&#x1f388;复矩阵和复向量共轭矩阵性质定理实对称阵的相关定理复数&#x1f388; 复数 (数学) (wikipedia.org) 加法&#xff1a;(abi)(cdi)(ac)(bd)i)减法&#xff1a;(abi)−(cdi)(a−c)(b−d)i)乘法&#xff1a;(abi)(cdi)acbciadibdi2(ac−bd)(bcad)i除法&…...

cmd set命令笔记

使用 set是cmd最基础的命令&#xff0c;每个人都会用&#xff0c;但其实它还是有些知识的。 set 用来接收入参 set /p var请选择&#xff08;1或2或3&#xff09;: echo %var%可以接收输入的参数。 set /p var请选择&#xff08;1或2或3&#xff09;: echo %var% 语法 he…...

IB学校获得IBO授权究竟有多难?

IB 学校认证之路&#xff0c;道阻且长 The road to IB school accreditation is long and difficult一所学校能获得IB授权必须经过IBO非常严格的审核&#xff0c;在办学使命&教育理念、组织架构、师资力量&授课技能、学校硬件设施和课程体系上完全符合标准才可获得授权…...

火山引擎 DataTester:A/B 测试,让企业摆脱广告投放“乱烧钱”

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 在广告投放的场景下&#xff0c;一线广告优化师通常会创建多个计划&#xff0c;去测试不同的广告素材效果。这套方法看似科学&#xff0c;实际上却存在诸多问题&…...

黑马redis学习记录:缓存

一、介绍 什么是缓存&#xff1f; 缓存(Cache)&#xff0c;就是数据交换的缓冲区&#xff0c;俗称的缓存就是缓冲区内的数据&#xff0c;一般从数据库中获取&#xff0c;存储于本地代码 缓存无处不在 为什么要使用缓存&#xff1f; 因为速度快,好用缓存数据存储于代码中,而…...

CD20靶向药物|适应症|市场销售-上市药品前景分析

CD20是靶向治疗的第一个靶点&#xff0c;是B细胞淋巴瘤的现代治疗药物。CD20作为治疗剂的使用被认为是方便的&#xff0c;原因有二。首先&#xff0c;在 CD20 阳性肿瘤的情况下&#xff0c;这种受体大量存在于 B 淋巴细胞表面——每个细胞大约有十万个分子。其次&#xff0c;干…...

多源 复制

使复制从属服务器能够同时从多个主服务器接收事务至少需要两个主服务器和一个从属服务器设备从属服务器为每个主服务器创建一个 复制通道从属服务器必须使用基于表的资料档案库多源复制与基于文件的资料档案库不兼容不尝试检测或解决冲突如果需要此功能&#xff0c;则由应用程序…...

微服务项目【消息推送(RabbitMQ)】

创建消费者 第1步&#xff1a;基于Spring Initialzr方式创建zmall-rabbitmq消费者模块 第2步&#xff1a;在公共模块中添加rabbitmq相关依赖 <!--rabbitmq--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-bo…...

vr电力刀闸事故应急演练实训系统开发

电力事故是在电力生产和输电过程中可能发生的意外事件&#xff0c;它们可能会对人们的生命财产安全造成严重的威胁。因此&#xff0c;电力事故应急演练显得尤为重要。而VR技术则可以为电力事故应急演练提供一种全新的解决方案。 在虚拟环境中&#xff0c;元宇宙VR会模拟各种触电…...

Linux下用qemu-nbd挂载qcow2镜像的完整指南(含LVM/非LVM/ntfs场景)

Linux下用qemu-nbd挂载qcow2镜像的完整指南&#xff08;含LVM/非LVM/ntfs场景&#xff09; 当虚拟机突然崩溃或需要从镜像中提取关键数据时&#xff0c;直接挂载qcow2镜像往往是最直接的解决方案。不同于常规磁盘挂载&#xff0c;qcow2镜像可能包含复杂的存储结构——从简单的e…...

FreeRTOS内存管理实战:如何在Xilinx Zynq上正确配置堆大小避免Malloc失败

FreeRTOS内存管理实战&#xff1a;Xilinx Zynq平台堆配置与优化指南 在嵌入式系统开发中&#xff0c;内存管理往往是决定系统稳定性的关键因素之一。当你在Xilinx Zynq平台上使用FreeRTOS时&#xff0c;突然遇到vApplicationMallocFailedHook()被调用的错误提示&#xff0c;这就…...

AudioLDM-S移动开发:Android音频API集成指南

AudioLDM-S移动开发&#xff1a;Android音频API集成指南 1. 引言 想在Android应用中实现"一句话生成专属音效"的酷炫功能吗&#xff1f;AudioLDM-S让这变得可能。这个强大的AI模型可以将文本描述直接转换为高质量的音效&#xff0c;从雨滴声到科幻音效都能轻松生成…...

电脑 TPM 怎么查看、开启与关闭?一文讲清安全与系统必备设置

现在安装 Windows 11、使用设备加密、安全启动、BitLocker 等功能&#xff0c;都离不开 TPM 安全芯片&#xff0c;很多人在升级系统、加固电脑安全时&#xff0c;才第一次接触到 TPM&#xff0c;却不知道自己的电脑是否支持、在哪里查看、如何开关&#xff0c;甚至因为不懂操作…...

Bypass Paywalls Clean:3步轻松解锁付费内容的终极指南

Bypass Paywalls Clean&#xff1a;3步轻松解锁付费内容的终极指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在数字内容付费化的今天&#xff0c;你是否经常遇到想阅读的文章却…...

STM32串口通信实战:从零配置USART到数据收发(附代码)

STM32串口通信实战&#xff1a;从零配置USART到数据收发&#xff08;附代码&#xff09; 第一次接触STM32的串口通信时&#xff0c;我被各种术语搞得晕头转向——波特率、数据位、停止位、校验位...更别提那些看起来像天书一样的寄存器配置了。直到在项目中被逼着用USART和传感…...

告别每次手动连WiFi!NVIDIA Jetson NX保姆级无线网络配置与静态IP绑定教程

NVIDIA Jetson NX无线网络配置与静态IP绑定全攻略 刚拿到NVIDIA Jetson NX开发板的开发者们&#xff0c;是否还在为每次开机都要手动连接WiFi而烦恼&#xff1f;是否因为DHCP分配的IP地址频繁变动&#xff0c;导致SSH远程连接中断而抓狂&#xff1f;本文将彻底解决这两个痛点&a…...

如何用Mojo实现高效A/B测试:算法效果评估与迭代优化完整指南

如何用Mojo实现高效A/B测试&#xff1a;算法效果评估与迭代优化完整指南 【免费下载链接】mojo Mojo编程语言 项目地址: https://gitcode.com/GitHub_Trending/mo/mojo Mojo编程语言为开发者提供了强大的性能和灵活性&#xff0c;特别适合构建需要高效算法评估的系统。本…...

终极WebSocket消息压缩优化指南:async-http-client性能调优实战

终极WebSocket消息压缩优化指南&#xff1a;async-http-client性能调优实战 【免费下载链接】async-http-client Asynchronous Http and WebSocket Client library for Java 项目地址: https://gitcode.com/gh_mirrors/as/async-http-client async-http-client是一款强…...

2026丨最火话题:关于java最新的进阶代码学习方法!+实战避坑!

​ 2026年Java进阶代码学习方法与实战避坑指南 Java进阶学习的核心方向 2026年Java生态的核心技术聚焦于云原生、高并发、AI集成及性能优化。掌握GraalVM、Quarkus等新兴框架,深入理解虚拟线程(Project Loom)和向量化计算(Project Panama)是进阶的关键。 模块化开发(JPM…...