SpringBoot学习笔记01-自动配置原理的源码解析

SpringBoot2学习笔记01 一、基础入门-SpringBoot2课程介绍 SpringBoot2核心技术与响应式编程,SpringBoot2里面很多配置有了很大的变化,包括底层很多源码,由于基于jdk8的新特性,对底层也重新设计了,所以无论从我们的使用部分还是原理部分都有很多的变化 SpringBoot2在大力推广它的响应式编程,所谓的响应式编程就是来解决一个问题,如何使用少量资源来编写一个极高通途量,能承担大并发的一个应用 文档地址:https://www.yuque.com/atguigu/springboot 二、基 阅读详情

利用@Import注解加载bean的机制,实现了SpringBoot的自动配置,@Import注解可用ImportSelector这个接口加载相应类型的Bean。

详细原理边看代码边说,另外提前注明,此处用的SpringBoot版本较老,2.1的,后来本人在2.7的版本再看,除了META-INF下的spring.factories文件,还引用了spring目录下的.imports文件;而到了3.0版本后,不再使用spring.factories文件,自动配置类全部从.imports文件中读取了,不过原理类似,这里不再赘述。

起手SpringBootApplication启动类,上面有个@EnableAutoConfiguration注解,点进去:

@Import(AutoConfigurationImportSelector.class),点进去AutoConfigurationImportSelector:

AutoConfigurationImportSelector实现了DeferredImportSelector接口,而DeferredImportSelector接口继承了ImportSelector接口,ImportSelector接口里有一个selectImports方法,这个方法返回需要用@Import注解引入Spring容器的Bean的类全限定名,AutoConfigurationImportSelector实现了这个方法。

接着回去看AutoConfigurationImportSelector如何实现该方法,其中一步就是 getAutoConfigurationEntry方法,点进去:

再点getCandidateConfigurations方法,这个方法读取需要被引入作为配置bean的候选项的类名(“候选项”是因为不一定全都作为配置bean加入容器):

关注loadFactoryNames方法,该方法第一个参数是getSpringFactoriesLoaderFactoryClass方法的返回值,点进去:

发现只是简单地返回了EnableAutoConfiguration这个Class对象,然后再返回上一步,点进loadFactoryNames方法,里面调用了loadSpringFactories方法,FACTORIES_RESOURCE_LOCATION点进去,其实就是spring.factories文件所在路径,loadSpringFactories方法将spring.factories文件作为一个Map返回,然后方法loadFactoryNames中使用getOrDefault方法,根据刚才EnableAutoConfiguration的类名作为key,读出Map中的value:

之所以用Map返回spring.factories文件的内容,看一眼该文件的结构就懂了:

因此上面的Java方法执行后,就可以读到自动配置候选类的全限定名啦,然后由Import注解将它们作为bean加载到Spring容器中就可以完成配置,不过,并不是所有的这些配置类都会被加载,还得看这些配置类自己有没有一些限定条件,以Redis的自动配置类举例:

spring.factories文件中,可以看到RedisAutoConfiguration类,它在EnableAutoConfiguration为key的value中,因此它是作为自动配置候选类的一员的,进入RedisAutoConfiguration类,发现该类果然有加载做Bean的限定条件:

里面两个redisTemplate眼熟得很,就是平时我们直接拿来用的东西,原来是在这里自动引入的。

数据库:关系运算整理大全(包括关系代数、元组关系演算、域关系演算) 数据库关系运算: 1. 关系代数(基本关系代数、附加关系代数、扩展关系代数) 2. 元组关系演算 3. 域关系演算 阅读详情

相关推荐

LwIP TCP Client 解决长数据发送的困扰

问题描述 LWIP 的 TCP Client 发送数据可以调用 tcp_write() 函数,将数据储存在缓冲区里面,然后等待超时自动发送或者调用tcp_output()函数进行发送。 然而 tcp_write() 函数 需要发送的数据过长时,将无法发送,并返回 ERR_MEM。 tcp_write()函数解析 tcp_write()的函数代码很多,就不细看代码了, 先看tcp_write()的完整函数: err_t tcp_write(struct tcp_pcb *pcb, const void

tiantangmoke的博客 1万+

SpringBoot自动配置原理

SpringBoot自动配置原理

m0_67942533的博客 7953

CVPR 2027 投稿规划:基于近3年录用率与截稿周期的5步时间管理法

本文为计算机视觉研究者提供CVPR 2027投稿的完整规划指南,基于近三年录用率与截稿周期数据,提出五步时间管理法。涵盖选题策略、实验设计、论文写作、同行评审到最终提交的全流程优化,特别针对CVPR日益激烈的竞争环境(2024年投稿量达11532篇,录取率仅23.6%)提供实用解决方案,帮助研究者提升投稿成功率。

weixin_34079177的博客 1143

【SpringBoot2】浅谈自动配置原理

文章目录SpringBoot自动配置原理SpringBoot 介绍注解介绍@Configuration@ImportResource@ConfigurationProperties@ComponentScan自动配置原理入门@SpringBootApplication1、@AutoConfigurationPackage2、@Import(AutoConfigurationImportSelector.class)小总结总结 SpringBoot自动配置原理 大家好,我是被白菜拱的猪。 一个热爱学习废寝忘食

放开这颗白菜让我来 494

MacBook上玩转国民技术N32G430:从零搭建ARM开发环境(VSCode + pyOCD)

本文详细介绍了在MacBook上搭建国民技术N32G430的ARM开发环境,涵盖VSCode配置、pyOCD调试及一键编译烧录全流程。通过Homebrew安装工具链、配置Python环境及VSCode插件,开发者可在MacOS高效开发嵌入式应用,特别适合国产芯片N32G430的开发者参考。

weixin_30614109的博客 436

麦克斯韦电磁场理论

1)从知识先后上说:麦克斯韦方程组为理解光的传播、反射、折射等现象提供了理论基础。不理解基础,怎么能理解上层建筑。2)从如何学懂上说,把基础学习的越牢,越深刻,后续学习上层建筑就会水到渠成一些,不会越学越多疑问。而是越学越少疑问。

weixin_55255438的博客 2825

学习springBoot源码原理day 01

Spring Boot提供了多种扩展点和回调机制,可以在应用程序启动过程中进行自定义操作。例如,可以通过实现ApplicationRunner或CommandLineRunner接口,在应用程序启动后执行特定的逻辑。总的来说,Spring Boot的源码原理主要包括自动配置、起步依赖、嵌入式容器、外部化配置和自定义启动过程等方面。通过这些机制,Spring Boot简化了Spring应用程序的开发和部署,提高了开发效率和便捷性。

m0_73500209的博客 306

从生成到检测:全面解析Deepfake技术的演进与对抗策略

本文全面解析了Deepfake技术的演进与对抗策略,从GAN生成技术到先进的检测手段,探讨了其在娱乐与安全领域的双重影响。文章详细介绍了Deepfake的核心原理、技术迭代关键节点以及最新的检测方法,揭示了AI生成与识别的激烈博弈。同时,展望了量子计算和生物特征认证在未来攻防战中的潜在应用。

jenkins8butler的博客 255

Spring Boot自动配置原理

自动装配是指在应用程序启动时,SpringBoot根据classpath类路径下的依赖自动装配应用程序所需的一系列bean和配置类,从而减少开发者的配置工作,提高开发效率。需求: 自定义redis-starter,要求当导入redis坐标时,SpringBoot自动创建Jedis的Bean参考: 可以参考mybatis启动类的应用创建redis-spring-boot-autoconfigure模块。

m0_68041576的博客 6616

BMS开发避坑指南:如何用ADBMS6815实现0.03%精度的电池采样?

本文深入解析了如何利用ADBMS6815等高精度AFE芯片,在车规级BMS开发中实现0.03%级别的电池电压采样精度。文章从芯片选型、硬件设计、软件配置、算法优化到系统验证,提供了一套完整的实战指南,帮助工程师系统性地提升BMS测量精度,从而保障电池安全、延长寿命并增强产品竞争力。

weixin_28314575的博客 134

ESP32-IDF开发之旅 网络篇⑩ Web配网

本文介绍了基于ESP32S3的Web配网实现方案。作者通过移植开源项目,在ESP32S3上实现了WiFi配置功能,包括AP模式创建、HTTP服务器搭建、NVS存储读写等核心功能。文章详细解析了代码结构,包含WiFi初始化、事件处理、NVS存储管理和HTML页面服务等关键模块。实现方案采用AP+STA双模式,支持通过网页扫描WiFi并保存配置信息,适用于物联网设备的网络配置场景。代码中使用了FreeRTOS任务、ESP-IDF事件组等技术,并提供了完整的错误处理和日志记录功能。

单片机菜鸟哥的博客 350

【SpringBoot系列-01】Spring Boot 启动原理深度解析

本文深入解析了Spring Boot应用的启动原理,从main方法入口到Bean加载的全过程。核心流程包括:创建SpringApplication实例、准备环境、创建应用上下文、预处理上下文、刷新上下文(核心步骤)以及执行runners等。重点分析了run()方法中的关键步骤,如环境配置加载、上下文创建与刷新机制,以及如何通过监听器机制实现各阶段的回调。文中还提供了流程图和时序图帮助理解启动流程,并分享了通过调试定位启动性能问题的实践经验,对深入理解Spring Boot内部机制和排查启动问题具有重要参考价

专注后端技术架构,AI技术分享 1581

机器人行业面试全攻略:从0到1拿下心仪Offer,看这一篇就够了

【摘要】2026年机器人行业迎来爆发期,全球市场规模超800亿美元,人才争夺激烈。本文针对机器人行业面试提供系统攻略:首先需明确岗位方向、打造差异化标签并了解目标公司;技术面试高频考点包括ROS框架、SLAM导航、运动控制、深度学习和嵌入式系统;项目介绍需采用STAR+R结构并量化成果;行为面试需注意协作能力与职业规划。文章还总结了简历堆砌、单向输出等五大常见误区,强调长期积累与精准准备的重要性,助力求职者把握行业窗口期机会。

郑伟强dev的专栏 188

查看SpringBoot的源码,了解运行原理

简单查看SpringBoot的源码 一. 了解自动生成的文件 打开SpringBoot项目后,系统会自动生成一个SpringbootDemo01Application.java文件用于存放程序的主方法,此外会生成application.properties存放配置文件,pom.xml依旧存放各种程序需要的依赖。 二. 简单查看SpringBoot的底层 二.1. 查看pom.xml 点开项目的p...

weixin_44821160的博客 4041

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Spring Boot 2 学习笔记(1 / 2)

01、基础入门-SpringBoot2课程介绍 Spring Boot 2核心技术 Spring Boot 2响应式编程 学习要求 -熟悉Spring基础 -熟悉Maven使用 环境要求 Java8及以上 Maven 3.3及以上 学习资料 Spring Boot官网 Spring Boot官方文档 本课程文档地址 视频地址1、视频地址2 源码地址 02、基础入门-Spring生态圈 Spring官网 Spring能做什么 Spring的能力 Spring的生态 覆盖了: w

KISS 13万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

深入解析springboot启动原理

1. 概述 用过springboot的人都知道,springboot一个特点是能直接将springboot的项目打包成一个jar就可以直接运行。但为什么springboot打的jar包就可以直接运行?这其中有什么秘密?可能对于大多数胖友来说要回答这两个问题都是一脸懵逼的,不过先不要方,今天蜗牛就来给大家说道说道。 开始之前,我们先将springboot先放在一边。让我们回想一下,我们如果要让一个普通项目生成一个可运行的jar包需要具备什么条件? 首先,这jar包中肯定需要指明一个程序入口吧。(和war

qq_22933035的博客 4043

SpringBoot系列01:一文读懂自动配置原理,新手从零搭建第一个HelloWorld项目

本文深入解析SpringBoot自动配置原理,从零搭建HelloWorld项目,对比Spring与SpringBoot差异,拆解核心注解@SpringBootApplication的底层逻辑。通过实战演示标准项目创建流程,结合源码分析自动配置的SPI机制和条件注解动态筛选过程。文章旨在帮助开发者彻底理解自动配置的"约定优于配置"思想,掌握面试高频考点,解决实际开发中的配置问题。 核心要点: SpringBoot自动配置通过预设模板+条件注解实现按需加载 @SpringBootApplication是

深耕 Java 后端与企业级软件架构设计,专注微服务、分布式系统、大模型 AI 应用架构落地。 352

SpringBoot——SpringBoot运行原理源码分析

SpringBoot——SpringBoot运行原理分析 SpringBoot的核心思想:自动配置 一、分析pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSc...

qq_43411550的博客 963

SpringBoot源码剖析

SpringBoot概念 什么是SpringBoot spring官方的网站:https://spring.io/ 翻译:通过Spring Boot,可以轻松地创建独立的,基于生产级别的基于Spring的应用程序,并且可以“运行”它们 其实Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置文件。 以下内容来自百度百科 SpringBoot是由Pivotal团队在2013年开始研发、2014年4月发布第一个版本的全新开源的轻量级框架。它基于Spring4.

沉浸式Study 4133

springboot的学习(1)

文章转载:(2条消息) Spring Boot 2 学习笔记(1 / 2)_KISS-优快云博客 Spring Boot 2 学习笔记(2 / 2) --- 01、基础入门-SpringBoot2课程介绍 02、基础入门-Spring生态圈 03、基础入门-SpringBoot的大时代背景 04、基础入门-SpringBoot官方文档架构 05、基础入门-SpringBoot...

qq_35907918的博客 1468

SpringBoot_day01自动配置

自动配置 自动装配原理 自动配置原理流程图 ========================================================================= 【全图放不下,此处引入别人已经整理好的图片】 原作者地址:https://www.processon.com/view/link/5fc0abf67d9c082f447ce49b =====================================================================

风归去. 310

springboot自动装配原理解析(源码级别详细解析)

首先我们先看下核心文件 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache

qq_42400763的博客 827

SpringBoot笔记01-自动装配原理及运行原理

IDEA建了一个springboot项目后点开pom.xml会发现如下一个父项目: <!-- 有一个父项目--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.5</version> <relati

weixin_44919186的博客 190

SpringBoot高级_02_SpringBoot原理深入及源码剖析

因此 在定义项目包结构时,要求定义的包结构非常规范,项目主程序启动类要定义在最外层的根目录位置,然后在根目录位置内部建立子包和类进行业务开发,这样才能够保证定义的类能够被组件扫描器扫描。项目中加入相关依赖启动器后,基本上不需要任何配置就可以运行程序,当然,我们也可以对这些自动配置类中默认的配置进行更改。自动配置类就会生效,打开该自动配置类会发现,在该配置类中通过全注解配置类的方式对Spring MVC。包依赖的时候,自动为我们配置一些组件的相关配置,我们无需配置或者只需要少量配置就能运行编写的项目。

qq_52922453的博客 413

【学习笔记】SpringBoot2源码级学习

1、Spring与SpringBoot 自行百度即可~ 2、SpringBoot入门 3、了解自动配置原理 1、SpringBoot特点 1.1、pom依赖管理 依赖管理——每个项目的pom.xml都有这么一段代码 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId>

hhhjjj201830341的博客 250

SpringBoot学习笔记1简单了解

SpringBoot学习笔记---Day01SpringBoot主程序入口注解@SpringBootApplication1.@SpringBootConfiguration2. @EnableAutoConfiguration如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导

dfcdsfv的博客 336

Spring Boot是如何实现自动配置的?

原文:sylvanassun.github.io/2018/01/08/2018-01-08-spring_boot_auto_configure/ Spring Boot 是 Spring 旗下众多的子项目之一,其理念是约定优于配置,它通过实现了自动配置(大多数用户平时习惯设置的配置作为默认配置)的功能来为用户快速构建出标准化的应用。 Spring Boot 的特点可以概述为如下几点...

勇往直前的专栏 940
上一篇: Spring学习笔记03-Configuration注解分析
下一篇: RPC框架的基本原理
Yancy Piggy
博客等级 码龄14年 27粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值