SpringBoot 配置类解析

news/2024/7/5 23:11:19 标签: spring boot, java, spring

全局流程解析

配置类解析入口

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.niftyadmin.cn/n/5349675.html

相关文章

【leetcode题解C++】144. 94. 145.二叉树前序、中序、后序遍历 and 102.二叉树的层序遍历

144. 二叉树前序遍历 给出一个根节点,返回前中后序遍历的结果的。 示例 1: 输入:root [1,null,2,3] 输出:[1,2,3]示例 2: 输入:root [] 输出:[]示例 3: 输入:root…

【Image captioning】论文阅读八—ClipCap: CLIP Prefix for Image Captioning_2021

中文标题:ClipCap: CLIP前缀用于图像描述(ClipCap: CLIP Prefix for Image Captioning) 文章目录 1. 介绍2. 相关工作3. 方法3.1 综述3.2 语言模型微调3.3 映射网络架构3.4 推理 4. 结果5. 结论 摘要:图像描述是视觉语言理解中的…

Gin 框架之jwt 介绍与基本使用

文章目录 一.JWT 介绍二.JWT认证与session认证的区别2.1 基于session认证流程图2.2 基于jwt认证流程图 三. JWT 的构成3.1 header : 头部3.2 payload : 负载3.2.1 标准中注册的声明 (建议但不强制使用)3.2.2 公共的声明3.2.3 私有的声明3.2.4 定义一个payload 3.3 signatrue : …

宏景eHR FrCodeAddTreeServlet SQL注入漏洞复现

0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合,满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR FrCodeAddTreeServlet 接口处存在SQL注入漏洞,未经过身份认证的远程攻击者可利用此漏洞执行任意SQL指令,从而窃取数…

Python网络爬虫实战——实验5:Python爬虫之selenium动态数据采集实战

【实验内容】 本实验主要介绍和使用selenium库在js动态加载网页中数据采集的作用。 【实验目的】 1、理解动态加载网页的概念 2、学习Selenium库基本使用 3、掌握动态加载数据采集流程 【实验步骤】 步骤1理解动态加载网页 步骤2学习使用Selenium库 步骤3 采集河北政府采购…

【Kafka】高级特性:主题

目录 主题的管理创建主题查看主题修改主题删除主题 增加分区分区副本的分配必要参数配置KafkaAdminClient应用功能操作示例 主题的管理 使用kafka-topics.sh脚本。 下面是使用脚本的一些选项 选项说明–config <String: namevalue>为创建的或修改的主题指定配置信息。…

IDEA项目启动时Flyway数据库迁移中的checksum不匹配问题及解决指南

在使用IntelliJ IDEA开发并启动一个依赖于Flyway进行数据库版本管理的Java项目时&#xff0c;如果遇到如下错误&#xff1a; “Validate failed: migration checksum mismatch for migration 1.15.0 ->Applied to database: 37561532 ->Resolved locally : -351684334”…

第2章-神经网络的数学基础——python深度学习

第2章 神经网络的数学基础 2.1 初识神经网络 我们来看一个具体的神经网络示例&#xff0c;使用 Python 的 Keras 库 来学习手写数字分类。 我们这里要解决的问题是&#xff0c; 将手写数字的灰度图像&#xff08;28 像素28 像素&#xff09;划分到 10 个类别 中&#xff08;0…