SpringBoot 配置类解析

全局流程解析

配置类解析入口

postProcessBeanDefinitionRegistry逻辑

processConfigBeanDefinitions逻辑

执行逻辑解析

执行入口

ConfigurationClassPostProcessor.processConfigBeanDefinitions()方法中的do while循环体中

循环体逻辑

parse方法调用链

doProcessConfigurationClass

  • 处理内部类
  • 处理PropertySource注解
  • ComponentScan指定的路径进行扫描
  • 处理Import注解
  • 处理ImportResource
  • 转换bean的方法BeanMethod
  • 处理接口的默认方法
  • 处理父类

核心方法解析

内部类处理

org.springframework.context.annotation.ConfigurationClassParser#processMemberClasses

PropertySource处理

org.springframework.context.annotation.ConfigurationClassParser#processPropertySource

  • 用法:@PropertySource({"demo.properties"})
  • 遍历指定路径,替换占位符,加载资源
  • 将资源添加到environment

ComponentScan处理

  • @ComponentScan(basePackages = ({"pkgA","pkgB"}), basePackageClasses = ({A.class, B.class})
  • 没设置扫描路径的话使用配置类所在路径
  • 过滤顺序: excludeFilters -> includeFilters -> false

Import处理

  • ImportSelector.class & DeferredImportSelector.class
  • 处理以上两个接口实现selectImports返回的类名数组
  • DeferredImportSelector接口调用优先级低于其他接口
  • 处理ImportBeanDefinitionRegistrar实现中注册的bean
  • 处理@Import(A.class)

ImportResource处理

  • @ImportResource("xyz.xml")
  • 将注解属性值放入importedResources
  • 后续loadBeanDefinitionsForConfigurationClass中加载定义的bean

BeanMethod处理

  • 构造BeanMethod对象放入配置类属性中后续处理

接口默认方法处理

父类处理

  • 一: 不为null
  • 二: 全路径名不以java开头
  • 三: 尚末处理过

面试题

  • 配置类是什么?起到什么作用?
  • 请举例一些常用的配置注解?
  • 介绍下SpringBoot框架对配置类的一个处理流程?
  • 你能说出其中它其中的一些关键类和方法么?
  • 配置类的处理一般包括哪些内容?
  • 详细的一些注解处理过程?如Import注解?

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

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

相关文章

刷力扣题过程中发现的不熟的函数

C中不熟的函数 1.memset() 头文件&#xff1a;<string.h> void *memset(void *s,int c,unsigned long n); 为指针变量s所指的前n个字节的内存单元填充给定的int型数值c 如&#xff1a; int a[10]; memset(a,0,sizeof(a)); //将数组a中的数全部赋值为02.sort() &#…

代码随想录day12 Java版

今天解决队列和栈的题&#xff0c;期待后面狠狠搞二叉树&#xff08;之前面试被刺了TT) 1047. 删除字符串中的所有相邻重复项 这个题目跟前面的匹配括号思路一模一样&#xff0c;入栈后消消乐即可 代码实现的时候发现容器类使用toString后就是包含[]的数组&#xff0c;所以需…

STM32——看门狗

STM32——看门狗 1.独立看门狗IWDG 独立看门狗介绍 什么是看门狗&#xff1f; 在由单片机构成的微型计算机系统中&#xff0c;由于单片机的工作常常会受到来自外界电磁场的干扰&#xff0c;造成程序的跑飞&#xff0c;而陷入死循环&#xff0c;程序的正常运行被打断&#x…

2023IT监控运维管理行业年度报告

随着信息技术的快速发展&#xff0c;IT监控运维管理软件在各行各业的应用越来越广泛。LinkSLA智能运维管家作为IT监控运维管理领域的优势品牌&#xff0c;深入洞察行业发展趋势&#xff0c;致力于为客户提供高效、稳定、安全的IT监控解决方案。 根据Gartner和艾瑞数据曾预测&a…

相片修复框架-GFPGAN

一 GFPGAN 介绍 GFPGAN 是一个由腾讯 ARC 团队开发的用于人脸图像生成和优化的 GAN 模型。在github可以找到开源的代码&#xff0c;它由两个主要模块组成&#xff1a; 退化移除模块 (U-Net)&#xff1a;用于从低分辨率、低质量的人脸图像中恢复出高质量的人脸图像。 生成式脸部…

SpringBoot自定义全局事务

1.说明 关于EnableTransactionManagement注解&#xff0c;可加可不加&#xff0c;加注解保证规范性。 2.核心代码 /** * author: wangning * date: 2024/1/23 16:19 */ Aspect Configuration ConditionalOnClass({TransactionManager.class, TransactionFactory.class}) pub…

由《幻兽帕鲁》私服漏洞引发的攻击面思考

《幻兽帕鲁》私服意外丢档 当了一天的帕鲁&#xff0c;回家开机抓帕鲁的时候发现服务器无法连接。运维工具看了下系统负载发现 CPU 已经跑满。 故障排查 登录服务器进行排查发现存在可疑的 docker 进程。 经过一番艰苦的溯源&#xff0c;终于在命令行历史中发现了端倪 攻击…

【极数系列】Flink集成DataSource读取Socket请求数据(09)

文章目录 01 引言02 简介概述03 基于socket套接字读取数据3.1 从套接字读取。元素可以由分隔符分隔。3.2 windows安装netcat工具&#xff08;1&#xff09;下载netcat工具&#xff08;2&#xff09;安装部署&#xff08;3&#xff09;启动socket端口监听 04 源码实战demo4.1 po…

模板(c++)part1

目录 1.模板 1.1模板基本使用 1.2.模板实例化 1.3函数模板的匹配规则 2.类模板 !!!!!!!目前更新到这&#xff0c;后面再更新模板的其他内容&#xff0c;本文章只是第一部分&#xff0c;第二部分等后面我再写!!!! 1模板 1.1模板基本使用 template<typename T> void …

前端实现token的无感刷新--VUE

token刷新的方案 方案一&#xff1a;后端返回过期时间&#xff0c;前端判断token过期时间&#xff0c;去调用刷新token的接口 缺点&#xff1a;需要后端提供一个token过期时间的字段&#xff1b;使用本地时间判断&#xff0c;若本地时间被修改&#xff0c;本地时间比服务…

【解决】Unity 工程无法正常打开而崩溃问题

开发平台&#xff1a;Unity 2022.3.17f1c1 一、问题描述 访问 Unity 工程等待 Open Projet&#xff08;busy for 时间&#xff09;&#xff0c;出现崩溃、闪退等情况&#xff0c;导致无法正常进入Unity编辑页面。 二、问题分析 笔者在 URP 渲染管线下处理 Obi Fluid 流体插件 D…

Docker本地部署Firefox浏览器并结合内网穿透公网访问

文章目录 1. 部署Firefox2. 本地访问Firefox3. Linux安装Cpolar4. 配置Firefox公网地址5. 远程访问Firefox6. 固定Firefox公网地址7. 固定地址访问Firefox Firefox是一款免费开源的网页浏览器&#xff0c;由Mozilla基金会开发和维护。它是第一个成功挑战微软Internet Explorer浏…

尝试搭建域

使用window 7 作为dmz 主机 server_2008 作为 预控 前提两台主机都在同一个LAN 下&#xff08;设置一个LAN 区域&#xff09;&#xff0c;同样防火墙关闭状态 首先搞定server 2008 中的域 1. 在计算机属性中选择更改设置中将主机名修改一下&#xff1a; 2. 在server 2008 中…

echarts 柱状图数据过多时自动滚动

当我们柱状图中X轴数据太多的时候&#xff0c;会自动把柱形的宽度挤的很细&#xff0c;带来的交互非常不好&#xff0c;我们可以用dataZoom属性来解决 简易的版本&#xff0c;横向滚动。 option.dataZoom [{type: "slider",show: true,startValue: 0, //数据窗口范…

【刷题】牛客网 NC132 环形链表的约瑟夫问题

NC132 环形链表的约瑟夫问题 题目描述思路一&#xff08;链表直通版&#xff09;思路二&#xff08;数组巧解版&#xff09;思路三&#xff08;变态秒杀版&#xff09;Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读下一篇文章见&#xff01;&#xff01;&#xff…

Oracle 的闪回技术是什么

什么是闪回 Oracle 数据库闪回技术是一组独特而丰富的数据恢复解决方案&#xff0c;能够有选择性地高效撤销一个错误的影响&#xff0c;从人为错误中恢复。闪回是一种数据恢复技术&#xff0c;它使得数据库可以回到过去的某个状态&#xff0c;可以满足用户的逻辑错误的快速恢复…

SpringCloudAlibaba组件总结笔记(如Nacos、SpringCloudGateway、OpenFeign,Ribbon,RabbitMQ)

这目录 1.Ribbon负载均衡1负载均衡原理2.负载均衡策略1.负载均衡策略2.自定义负载均衡策略 3.饥饿加载 2.Nacos注册中心与Eureka的区别3.Nacos配置中心1.从微服务拉取配置2.配置热更新1.2.1.方式一1.2.2.方式二 3.配置共享1.配置共享的优先级 4.Feign1.Feign使用优化2.配置连接…

使用Promethues+Grafana监控Elasticsearch

PromethuesGrafana监控Elasticsearch 监控选用说明指标上报流程说明实现监控的步骤搭建elasticsearch-exporter服务搭建promethues和grafana服务 监控选用说明 虽然用Kibana来监控ES&#xff0c;能展示一些关键指标&#xff0c;但ES本身收集的指标并不全面&#xff0c;还需要在…

torchvision.models._utils.IntermediateLayerGetter()使用

torchvision.models._utils.IntermediateLayerGetter&#xff08;&#xff09;使用 源码如下&#xff1a; from collections import OrderedDictimport torch from torch import nnclass IntermediateLayerGetter(nn.ModuleDict):"""Module wrapper that ret…

Python采集学习笔记-读取excel数据

表格格式 方法一:使用xlrd import xlrd 1.读取Excel文件 workbook xlrd.open_workbook(plc.xlsx) 2.读取第一个表 sheet workbook.sheet_by_index(0) 3.获取表格总行数 total_rows sheet.nrows 4.创建列表,存储表格一行中每一列信息 plc_info [] for row in range(1…