SpringBoot——原理(自动配置+原理分析-源码跟踪)

news2024/11/25 23:02:44

源码跟踪

从Springboot的启动类进入,进行分析.

 源码跟踪技巧

在以后接触各种框架的时候,如果需要查看源码,需要找到关键点和核心流程,先在宏观对整个原理和流程有一个认识,之后再去了解其中的细节。

按住Ctrl+左键进入源码

在整个注解上面还有很多个注解,上面四个是用来修饰注解的元注解,不需要看。

下面开始第一个注解

@SpringBootConfigguration注解   

在这个注解中也有三个源注解,不用看。

除此之外的它的主要作用就是装配了@Configuration这个注解,作用就是声明配置类。

还有一个@Indexed注解作用是加速应用启动。 

有了这个注解后,启动类也会变成一个配置类,所以在启动类当中也可以像下面一样声明Bean对象交给IOC容器管理。 

 @ComponentScan

前面有说过启动类具有包扫描的功能,原因就是启动类已经配置了一个组件扫描的注解。

@EnableAutoConfiguration

在上一篇文章有提到@Enablexxxx这种注解一般里面封装的都是@Import开头的注解,用来导入指定的Bean或者配置类。从其后半段可以看出这个就是自动配置的核心注解。

从下面可以看见这个注解底层封装了一个Import注解,value是一个ImportSelector接口的实现类的全类名。

AutoConfigurationImportSelector

在这个实现类当中会看见它实现了一个嵌套了多层的ImportSelector接口。

在ImportSelector接口中会实现一个selectImports方法,返回一个Stinrg数组,里面就是需要导入到spring 的IOC容器中的类。

下面是对 selectImports方法的接口实现

 关于它具体怎么实现的真的不想再看了,以后面试前再来看吧,这个手撕源码的内容。

里面 selectImports会返回本类下的一个方法,里面有一个报错信息,

在上面这个信息中可以看出需要的东西有一个spring.factories和springframework.boot.autoconfigure

No auto configuration classes found in META-INF/spring.factories nor in META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. 

 在前一篇 文章中模拟的第三方依赖中可以看见有以下这个autoconfigure这个依赖。这个就是进行自动配置的依赖,也就是上面需要的配置文件依赖。

又比如在用到mybatis的时候,在mybatis的依赖下也会有一个autoconfigure的依赖如下所示 

 在左侧栏目里面有一个外部库,有springboot官方提供的jar包,里面可以看这些依赖里面具体都是些什么样的信息。

往下找可以看见上面需要的两个东西。

META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. 

//SpringBoot后期提供的加载配置类的文件

spring.factories      

//SprngBoot早期提供的加载配置类的文件

在 spring.factories 当中如下所示,里面都是一些类的全类名。

 在另外一个文件当中也是一些全类名,最终在项目启动时都会加载并读取到IOC容器当中交给IOC容器管理。这些类后缀都是AutoConfiguration,都是自动配置的意思。这些类底层都会封装一个

@Configure注解,关于功能的具体实现都是在底层有涉及

 比如下面这个Gson就是google提供的处理Json格式数据的依赖的底层具体实现。

 

 然后我们在导入这个依赖后就可以直接拿来注入使用了,但是不是所有的配置类下的Bean对象都会被注册到IOC容器当中,像上图这样还会有一个@ConditionalOnMissingBean注解表示按条件装配,只有满足一定条件之后才会被注册到IOC容器当中。

总结

下一篇文章再看@ConditionalOnMissingBean注解如何进行条件装配。

传送门链接:

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

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

相关文章

[机缘参悟-98] :层次不同、维度不同、视角不同、结论不同

目录 全局VS具备, 总体V部分 认知的六个认知层次: 认知的六个立体化维度: 0、维空间,点思维 1、一维空间,直线思维 2、二维空间,平面思维 3、三维空间:立体思维。 4、四维空间&#xff…

(0)调优

文章目录 前言 1 调优过程说明 2 设置飞机进行调优 3 任务规划器助手 4 初始调优飞行 5 评估飞机的调优 6 手动调优 7 自动调优 8 输入整形 9 基于发射器的调优 10 配置Notch滤波器 11 配置飞行中的FFT 前言 在默认的 PID 设置下,ArduPilot 可以在开箱…

Windows PyCharm 2022/2023 使用Centos7 的虚拟环境 venv 实现文件实时同步 代码代码Git自动识别 解决 Samba Cannot Save File 的问题

前期准备 git报错 fatal: unsafe repository 解决方法 因为是远程文件夹,老版本时没这个问题,新版本git或者pycharm有这个限制,不能自动识别更改的代码,报unsafe.directory的问题,直接暴力解决,加* git c…

美债死期推迟

* * * 原创:刘教链 * * * 号外:今天在小号“刘教链Pro”发表了一篇《链上投票是社会契约的一种存证》,探讨未来组织和DAO的治理问题,欢迎关注“刘教链Pro”并阅读。 * * * 隔夜比特币略有回升,从26.5k下方来到了26.5k…

风辞远的科技茶屋:可怖的AI

大家好,我是脑极体的风辞远。一直以来我们都在写大块文章,很少有机会跟大家聊天。时间长了,总觉得这种方式有一点冷漠感,不够轻松,加上往往每篇文章只聚焦一个话题,而我们产能有限,就会有很多值…

[创业之路-71] :创业思维与打工思维的区别

其实打工思维和创业思维最核心的本质区别是你是否愿意去尝试。 很多时候我打工的时候老板没发现我的潜质,所以我去创业了,这个没有,你打工的时候一定有一项极其长的长项,只不过当时你可能也没意识到,老板没意识到。 …

ChatGPT在App Store累计下载量已突破50万次;Anthropic已成功完成4.5亿美元C轮融资

🚀 OpenAI的ChatGPT应用在苹果App Store上线6天时间内,累计下载量已突破50万次。 OpenAI的ChatGPT应用在苹果App Store上线6天时间内,累计下载量已突破50万次。 与微软必应等聊天机器人相比,其热度远超过且持续上升。 &#x1…

redis未授权访问漏洞

1、什么是redis未授权访问漏洞 Redis安装后,如果绑定在 0.0.0.0:6379,并且没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证或使用…

如何顺序处理设备上报的数据

1. 引言 随着智能技术的发展,市场上出现了很多的智能设备,其具有连接网络的能力。用户可以实现远程控制,并且设备也可上报自己的状态,实现云端对设备的运行情况分析。在某些情况下需要保证设备上报状态的有序性,例如传…

简单介绍二叉树

前言 学习数据结构,二叉树是一大难点,也是一大重点,小伙伴们和我一起看看二叉树的知识吧! 本文代码是Java。 目录 前言 一、什么是二叉树 二、二叉树的遍历 (一)前序遍历 (二)中…

C++ 入门导引(这是一篇由GPT4写的文章)

C 应用场景 C 是一种广泛应用的编程语言,拥有多种使用场景。以下是 C 的一些主要应用场景: ​1. 游戏开发:C 常用于游戏开发,尤其是大型 3D 游戏。它可以轻松地与图形 API(如 OpenGL 和 DirectX)集成&…

element-ui树形控件el-tree详解

概述 这里我利用element-ui开发一个vue的树形组件 引入element-ui 安装element-plus cnpm install element-plus --save 安装按需导入 cnpm install -D unplugin-vue-components unplugin-auto-import 修改vite.config.js配置按需加载 import AutoImport from unplugin-a…

云原生架构:创新未来的应用开发和部署范式

点击上方“程序猿技术大咖”,关注并选择“设为星标” 回复“加群”获取入群讨论资格! 摘要:本文深入探讨云原生架构的优势、实施指南以及关键技术和工具。通过容器化、微服务架构、持续交付和自动化管理等实践,云原生架构为企业提…

盘点一个Python列表的基础题目

点击上方“Python爬虫与数据挖掘”,进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 随意春芳歇,王孙自可留。 大家好,我是皮皮。 一、前言 前几天在Python最强王者群【eric】问了一个Python列表基础的问题&#x…

web练习第二周

前言:(博主个人学习笔记,不用看)web练习第二周,仅做出前3题。相比于第一周,难度大幅增加,写题时就算看了wp还是像个无头苍蝇一样到处乱创,大多都是陌生知识点,工具的使用…

购买两块巧克力-第105场力扣夜喵双周赛-java双百方案

一、题目描述 给你一个整数数组 prices ,它表示一个商店里若干巧克力的价格。同时给你一个整数 money ,表示你一开始拥有的钱数。 你必须购买 恰好 两块巧克力,而且剩余的钱数必须是 非负数 。同时你想最小化购买两块巧克力的总花费。 请你…

【原创】浅谈EtherCAT主站EOE(上)-EOE网络

版权声明:本文为本文为博主原创文章,未经同意,禁止转载。如有问题,欢迎指正。博客地址:https://www.cnblogs.com/wsg1100/ 文章目录 一、EoE二、EoE服务规范EtherCAT主站如何提供EoE服务? 三、EoE网络EOE网…

我用GPT搭建了一个虚拟女友!

Datawhale干货 作者:仲泰,Datawhale成员 1. 作者知乎:https://www.zhihu.com/people/yong-tan-39-67 2.我用GPT搭建了一个虚拟女友-哔哩哔哩:https://b23.tv/GYYwMcq 3. 五月学习:ChatGPT应用组队学习来了&#xff01…

原生canvas标签画线——直线、平行线(设置不同颜色和宽度)

1.一条直线 效果图如下&#xff1a; 代码如下&#xff1a; <!--* Author: your name* Date: 2023-05-24 17:50:28* LastEditTime: 2023-05-24 18:06:39* LastEditors: localhost* Description: In User Settings Edit* FilePath: /canvas/day01/体验canvas.html --> &l…

Python潮流周刊#3:PyPI 的安全问题

△点击上方“Python猫”关注 &#xff0c;回复“1”领取电子书 你好&#xff0c;我是猫哥。这里记录每周值得分享的 Python 及通用技术内容&#xff0c;部分为英文&#xff0c;已在小标题注明。&#xff08;标题取自其中一则分享&#xff0c;不代表全部内容都是该主题&#xff…