首页 > 其他分享 >springboot自学(4)自动配置原理

springboot自学(4)自动配置原理

时间:2024-07-30 16:08:54浏览次数:9  
标签:springboot spring 配置 redis bean 原理 自学 加载

自动配置原理

1、收集spring开发者的编程习惯,整理开发过程使用的常用技术列表——》技术集A

2、收集常用技术(技术集A)的使用参数,整理开发过程中每个技术的常用设置列表——》设置集B

3、初始化springboot基础环境,加载用户自定义的bean和导入的其他坐标,形成初始化环境

4、将技术集A包含的所有技术都定义出来,在spring或springboot启动时默认全部加载

5、将技术集A中具有使用条件的技术约定出来,设置成按条件加载,由开发者决定是否使用该技术(与初始化环境比对)

6、将设置集B作为默认配置加载(约定大于配置),减少开发者配置工作量

7、开放设置集B的配置覆盖接口,有开发者根据自身需要决定是否覆盖默认配置

 

源码:

 

 

先从第一个说起,Registrar是实现了ImportBeanDefinitionRegistrar接口,通过BeanDefinition的注册器注册实名bean,实现对容器中的bean的裁定

 

 

registerBeanDefinitions方法里面,又调用了一个register方法,第一个参数是注册器,而第二个参数是获取了当前的包

 

 

进入这个register方法后,会先判断这个注册器是否包含一个BEAN的bean定义

 

 

加载过是一回事,没加载过是另一回事,目前没加载过,所以走else,注册BeanDefinition,bean的类名就是BEAN,进入第二个参数,第一个方法描述的是一个包的信息,第二个是设置权限,关键是第三个,把传过来的参数加到BasePackages对象里面去,就是记录了你要扫哪些包(只是添加进去,而不是设置,因为其他的注解也是有很多的包参加扫描的)

 

 

那么这个注解的功能我们就了解了

 

 

第二个注解

里面的接口分三个大类,其中几个是Aware结尾的,实现这些接口的目的就是为了获取Aware前面资源的对象

 

 

当然是实现接口里的方法给这些变量赋值才行,如

 

 

Ordered的含义是当前这个类在spring容器中的加载顺序

 

 

而这个注解的加载顺序是最大值-1

最后DeferredImportSelector,里面继承了ImportSelector,

 

 

 

里面定义了一个全新的接口Group,先从process开始看起

 

 

看看怎么实现的

 

 

接下来看红线的方法

 

 

 

不断的往里面深度会到这一步,就是自动装配读取spring.fatories的代码了

 

 

 

以上是对技术集A的加载部分。接下来是对设置集的加载。

 

 

举例找redis的加载,根据这个值找到对应的类

 

 

看注释有条件加载,必须有RedisOperations才能加载。但是目前没有

 

 

加上redis的依赖以后,才有了

 

 

接下来是加载redis的配置类,并设定为bean

 

再进去就是加载redis的配置文件,就是springboot的配置文件

 

不配置的话,里面都是有默认值的,但是有的也没有,比如username

 

接下来的@Import导入的是两种客户端的实现

 

最关键的是,定义bean,第一个是如果当前环境下没有redisTemplate这个bean且没有提供redis的连接工厂,就加载下面的代码生成一个redisTemplate,这样能够防止重复加载,因为也有自己定义redisTemplate的可能。

 

而下面的是stringRedisTemplate

 

自己开发自动配置

Springboot不是包含了所有的技术,比如MyBatis

 

参考MyBatis,自己写的话也是一样弄个spring.factories,把自己的自动配置类写进去就行了

那么现有的不想要的怎么去掉呢

 

配置文件排除

也可以在注解springbootApplocation排除

 

 

 

 

 

 

 

 

标签:springboot,spring,配置,redis,bean,原理,自学,加载
From: https://www.cnblogs.com/bulesea/p/18332674

相关文章

  • 《Milvus Cloud向量数据库》——Spark Connector 工作原理及使用场景
    SparkConnector工作原理及使用场景深度解析在大数据处理与机器学习领域,ApacheSpark和Databricks已成为处理海量数据的首选工具。它们不仅能够高效地处理结构化数据,还擅长以批量的方式处理非结构化数据,进行数据清洗,并调用模型生成Embedding向量。然而,在处理完这些数据......
  • EasyExcel数据导出实现、动态表头生成、SpringBoot3框架
    1、引入EasyExcel依赖<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.2</version></dependency>2、定义ExcelModel表单模型publicclassExcelMod......
  • 跨链实现与原理
    跨链的实现和原理常见的有哪些跨链技术旨在解决不同区块链网络之间的互操作性问题,使得这些区块链可以相互通信、交换价值和数据。以下是几种常见的跨链实现和原理:1.中继(Relays)中继是一种跨链技术,通过一个中继合约来监听一个区块链上的事件,并将这些事件转发到另一个区块链上。......
  • ChatGPT:人工智能聊天机器人的工作原理详解
    ChatGPT:人工智能聊天机器人的工作原理详解在近年来的科技浪潮中,人工智能(AI)的飞速发展让我们见证了无数令人惊叹的成果。其中,ChatGPT作为一款先进的聊天机器人,凭借其出色的对话能力和广泛的应用场景,引起了广泛的关注。那么,ChatGPT是如何工作的呢?本文将为你揭开ChatGPT的神秘......
  • 协议-TLS协议-客户端TLS解密的实现原理
    参考来源:练习实践-TLS协议01-Wireshark对https数据的解密练习实践-TLS协议01-客户端curl配合sslkey文件实现解密极客时间:网络排查案例课-实战二:应用层真实案例揭秘篇-20丨TLS加解密:如何解密HTTPS流量?客户端如何做TLS解密?这里说的客户端,包括了Chrome、Firefox等浏览......
  • 雷达气象学(5)——多普勒天气雷达的原理
    目录5.1多普勒效应和多普勒频移5.2最大不模糊速度和速度模糊5.2.1脉冲对处理技术5.2.2最大不模糊速度5.2.3速度模糊5.2.4速度退模糊算法5.3最大不模糊距离和距离折叠5.3.1最大不模糊距离5.3.2距离折叠5.3.3距离去折叠的方法5.4多普勒两难5.5WSR-88D的取样技术5.1多......
  • RocketMQ知识总结(基本原理)
    文章收录在网站:http://hardyfish.top/文章收录在网站:http://hardyfish.top/文章收录在网站:http://hardyfish.top/文章收录在网站:http://hardyfish.top/基本原理总体架构图零拷贝零拷贝技术是一个思想,指的是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另......
  • springboot校园失物招领系统-计算机毕业设计源码17082
    目 录摘要1绪论1.1研究背景1.2 研究意义1.3论文结构与章节安排2 相关技术介绍2.1B/S结构2.2SpringBoot框架2.3MySQL数据库3系统分析3.1可行性分析3.2系统流程分析3.2.1数据新增流程3.2.2 数据删除流程3.3 系统功能分析3.3.1......
  • SpringBoot2.7 霸王硬上弓 Logback1.3 → 不甜但解渴
    开心一刻一大早,她就发消息质问我她:你给我老实交代,昨晚去哪鬼混了?我:没有,就哥几个喝了点酒她:那我给你打了那么多视频,为什么不接?我:不太方便呀她:我不信,和你哥们儿喝酒有啥不方便接视频的?她:你肯定有别的女人了!我:你老公就坐在我旁边,我敢接?前情回顾SpringBoot2.7还是任性的,就......
  • 基于SpringBoot+Vue前后端分离的高校实验室预约管理系统的设计与实现
    基于SpringBoot+Vue前后端分离的高校实验室预约管理系统的设计与实现DesignandImplementationofCollegeLaboratoryReservationManagementSystembasedonSpringBootandVueforFront-End/Back-EndSeparation完整下载链接:基于SpringBoot+Vue前后端分离的高校......