SpringBoot修真秘籍

一、古代篇

在修仙界中,Spring Boot 自动装配之术,犹如炼器炉中的异火,能够将繁杂的配置化作一缕轻烟,让修仙者在构建应用之路上,如履平地,轻松驾驭。

第一章:灵根觉醒——Spring Boot 的诞生

在古老的修仙界,随着灵气的复苏,修仙者们对于法宝的需求日益增长。然而,炼器并非易事,炼制法宝需要选择合适的炼器炉、掌握熟练的炼制步骤。

目前修仙界比较通用的炼器炉有Java、C++、Python、Go等等。而在炼制过程中不少修士都反馈过,非常繁琐的炼制步骤让许多修仙者望而却步。直到有一天,一位名叫Spring的大能,以其深厚的修为,创造出了一种名为“Spring Boot”的神奇异火,从此,修仙者们只需轻轻松松,便能炼制出法宝,无需再为繁杂的炼器步骤所困扰。

第二章:异火点燃——自动装配的奥秘

Spring Boot的核心就是自动装配阵法。修仙者只需遵循一定的灵气流动规则,便能自动完成法宝的装配。这异火,便是 Spring Boot 的注解之力,如 @SpringBootApplication、@EnableAutoConfiguration 等,它们如同仙符一般,贴在法宝之上,便能引导灵气自动流转,完成法宝的炼制。

自动装配的奥秘,便是一枚名为@SpringBootApplication的仙符。

它由更为强大的@EnableAutoConfiguration仙符所构成,

而@EnableAutoConfiguration仙符内又蕴含着@Import仙符。

@Import仙符能装载一小型法阵AutoConfigurationImportSelector,它能够连接到一个被称为spring.factories的神纹法则集。神纹记载了所有配置类的法则。通过反射之镜,能解读所有法则,从而完成了对所有配置类的装配。

第三章:灵材收集——配置的简化

在修仙界,炼制法宝需要收集各种灵材,而在 Spring Boot 的世界里,这些灵材便是各种配置文件。自动装配之术,能够让修仙者将这些灵材简化,甚至无需手动收集,只需在法宝中嵌入特定的灵符,如 application.properties 或 application.yml,便能自动感应灵气,完成配置的收集与整合。

第四章:灵光乍现——应用的启动

当一切准备就绪,修仙者只需轻念咒语,启动法宝,便能看到灵光乍现,法宝运转如飞。在 Spring Boot 中,这便是应用的启动过程。自动装配之术,让这一过程变得异常简单,修仙者无需再为启动法宝而耗费心神,只需专注于修炼,提升自身修为。

二、现代篇

了解SpringBoot自动装配原理从@SpringBootApplication注解开始。

我们可以看到@SpringBootApplication注解的实现其实是一个注解组合,除了几个基本的注解外,最核心的就是@EnableAutoConfiguration

    //该注解作用于类、接口(包含注解)、枚举@Target(ElementType.TYPE)//注解生命周期:被保存到Class文件中,JVM加载Class文件之后仍然存在    @Retention(RetentionPolicy.RUNTIME)//生成javadoc会把该注解展示出来@Documented//子类会继承这个注解@Inherited//标识是SpringBoot配置类@SpringBootConfiguration//实现自动装配注解@EnableAutoConfiguration//扫描该类所在包下所有配置类@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })public @interface SpringBootApplication {

继续进入@EnableAutoConfiguration注解,它也是一个组合注解。核心注解就是@Import(AutoConfigurationImportSelector.class),@Import注解把AutoConfigurationImportSelector类加载到Spring容器。

	@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited//主程序类所在包及所有子包下的组件到扫描到spring容器中@AutoConfigurationPackage//将AutoConfigurationImportSelector这个类导入到spring容器中@Import(AutoConfigurationImportSelector.class)public @interface EnableAutoConfiguration {

AutoConfigurationImportSelector类中的核心方法是selectImports


public String[] selectImports(AnnotationMetadata annotationMetadata) {if (!isEnabled(annotationMetadata)) {return NO_IMPORTS;
}
AutoConfigurationEntry autoConfigurationEntry = getAutoConfigurationEntry(annotationMetadata);
return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());
}

selectImports方法是自动装配的核心实现,主要是读取META-INF/spring.factories文件,加载需要装配的配置类集合

getAutoConfigurationEntry实现加载的方法,进入后可以看到它使用的是getCandidateConfigurations

进入后使用的是SpringFactoriesLoader.loadFactoryNames

loadFactoryNames返回的是loadSpringFactories的结果

可以看到loadSpringFactories中的实现是classLoader.getResources("META-INF/spring.factories")读取META-INF/spring.factories文件中的全限定名。

小结:

1)@SpringBootApplication=>@EnableAutoConfiguration=>@Import实现自动装配

2)面试中问到的spring.factories中的配置项太多,每次启动都要全部加载么?

不是,springboot自动装配会进行条件过滤,满足条件才加载。一般Configuration类中会增加注解来设置加载的条件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/22705.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于单片机的电子万年历设计

摘要: 本设计以 AT89C51 单片机为主控器,使用 DS1302 时钟芯片、DS18B20 温度芯片、LCD1602 显示模块,利用Proteus 仿真软件和 Keil 编译软件进行了基于单片机的电子万年历仿真,设计的万年历可以在液晶上显示时间,同时还具有时间校准、温度显示等功能。 关键词 :单片机…

【方法论】钟澄国家杰青 鲸吞法 写文献综述、大论文框架必备

Xlab2020的个人空间-Xlab2020个人主页-哔哩哔哩视频 老师指南 就是1号文件有了后,也就是【】概括了之后,我们会运行下程序(程序我会让学生share)。然后程序会执行这么一个操作,复制下【】内容,然后在第二个…

SpringBoot: 使用GraalVM编译native应用

曾今Go语言里让我最艳羡的两个特性,一个是Goroutine,一个是native编译。 Java 21的虚线程实现了类似Goroutine的能力。Spring Boot 3.x开始提供了GraalVM的支持,现在Spring Boot也能打包成native文件了。 这一篇文章的目标是用一个案例讲解如…

linux系统ubuntu中在命令行中打开图形界面的文件夹

在命令行中打开当前路径,以文件管理器的形式打开: 命令 # 打开文件管理器 当前的路径 nautilus .nautilus 是一个与 GNOME 桌面环境集成的文件管理器的命令行启动程序。在 Linux 系统中,特别是使用 GNOME 作为桌面环境时,用户经…

pidstat -d 1分析磁盘吞吐量

iostat -dx 1 查看磁盘IO吞吐量 pidstat -d 1看是哪个进程写的

水电站大坝安全监测工作详解

水电站大坝安全监测是确保大坝结构安全和操作安全的关键组成部分。本文将详细解释水电站大坝安全监测的9项主要工作内容,帮助理解其重要性和执行过程。 1) 现场监测 现场监测是水电站大坝安全监测的首要步骤。监测人员需要定期对大坝的物理结构进行检查,…

论文AI率不达标?AI工具助你一臂之力

告诉大家一个非常残忍的答案,以后所有论文都会被查ai率的。 学术界不仅关注传统的抄袭问题,还增加了一项名为“AIGC检测”的指标。例如知网、维普等平台都能检测论文AI率。 用GPT写论文虽然重复率基本不用担心,但是AI率基本都较高&#xff…

在 Qt Creator 上创建 ROS 项目并新建/导入 ROS 包

0、引言 ⚠️ 在开始之前,您需要确保您已经为 Qt 配置好了 ROS 开发环境了。如果您还没有配置好,可以参考这篇文章 本文将着手探讨如何在 Qt Creator 上编辑 ROS 项目(工作空间)。 1、本教程使用到的相关软件或产品 Ubuntu 20.0…

OpenCV学习(4.2) 图像的几何变换

1.目标 学习将不同的几何变换应用到图像上,如平移、旋转、仿射变换等。你会看到这些函数: cv.getPerspectiveTransform 2.缩放 缩放是调整图片的大小。 OpenCV 使用 cv.resize() 函数进行调整。可以手动指定图像的大小,也可以指定比例因子。可以使用不…

【Vue】小黑记事本

文章目录 一、需求说明二、思路分析三、代码实现 一、需求说明 拆分基础组件渲染待办任务添加任务删除任务底部合计 和 清空功能持久化存储 二、思路分析 拆分基础组件 咱们可以把小黑记事本原有的结构拆成三部分内容:头部(TodoHeader)、列…

基于semantic_kernel的ChatMD系统

问答系统需求文档 一、项目概述 本项目旨在开发一个能够上传 MD 文件,并基于 MD内容进行问答互动的系统。用户可以上传 MD文件,系统将解析 MD内容,并允许用户通过对话框进行问答互动,获取有关 MD文件内容的信息。 二、功能需求…

FreeRTOS学习笔记-基于stm32(8)信号量总结(二值信号量、计数型信号量、互斥信号量、优先级翻转、优先级继承)

一、什么是信号量 信号量是一种队列,用于任务间同步和资源管理的机制,主要用来传递状态。就像是一种特殊的“旗子”或“钥匙”,用来在不同的任务之间进行沟通和协调,确保它们能够正确地配合工作,不会互相干扰。 二、二…

保研面试408复习 8——计算机网络(浏览器http)、离散数学(平面图)、操作系统、数据结构

文章目录 一、计算机网络1、从在浏览器输入网址到页面显示的过程1. 输入网址2. DNS 解析3. 建立TCP连接4. 发送HTTP请求5. 服务器处理请求并响应6. 浏览器处理响应7. 页面渲染 二、离散数学一、平面图1、平面图性质2、Kuratowski定理 三、操作系统四、数据结构 一、计算机网络 …

IDCF五周年专场—【研发效能·创享大会】圆满落幕!

2024 年5 月25 日,【研发效能创享大会】—IDCF五周年专场在北京希尔顿欢朋酒店(大红门)成功举办!本次大会旨在为社区成员提供一个学习与交流的平台,分享技术经验,交流行业见解,促进技术合作与创…

Java模板模式及代码

意图 在父类中定义了算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤,这种类型的设计模式属于行为型模式。 主要解决的问题 解决在多个子类中重复实现相同的方法的问…

北京海淀区永丰产业基地地块出让,海开控股79.17亿元竞得

据悉,位于北京海淀区西北旺镇的永丰产业基地地块正式出让,引起了业界的广泛关注。经过激烈的竞争,最终由海开控股以79.17亿元的价格成功竞得该地块,成交楼面价达到35588元/平方米,溢价率为1.5%。此次出让的地块不仅吸引…

【Java基础】线程的五大状态

新建状态 使用 new 关键字和 Thread 类或其子类建立一个线程对象后,该线程对象就处于新建状态。它保持这个状态直到程序 start() 这个线程。 就绪状态 当线程对象调用了start()方法之后,该线程就进入就绪状态。就绪状态的线程处于就绪队列中&#xff…

景深技术在AI绘画中的魔法:为数字艺术注入新维度

引言: 在人工智能(AI)的浪潮中,绘画艺术领域迎来了革命性的变革。AI绘画不仅改变了创作过程,还为艺术家和设计师提供了前所未有的工具。其中,景深技术作为一种重要的视觉处理手段,在AI绘画中的应…

error:nullptr was not declared in this scope

nullptr是c11的内容,在Qt5.5.0中使用时需要在.pro添加 QMAKE_CXXFLAGS -stdc11

告别繁琐,Xinstall一键解决App代理结算难题!

在移动互联网的浪潮中,App的推广和运营成为了众多企业和开发者关注的焦点。然而,随着App市场的日益竞争,代理结算的复杂性和繁琐性成为了许多推广者头疼的问题。为了解决这个问题,Xinstall凭借其专业的技术和丰富的服务经验&#…