Spring源码解读(9)---解析配置类

2023-11-13

Spring源码解读(9)—解析配置类

解析配置类

1、在启动Spring时,需要传入一个AppConfig.class给ApplicationContext,ApplicationContext会根据AppConfig类封装为一个BeanDefinition,这种BeanDefinition就是配置类BeanDefinition

2、ConfigurationClassPostProcessor中会把配置类BeanDefinition取出来

3、构造一个ConfigurationClassParser用来解析配置类BeanDefinition,并会生成一个配置类对象ConfigurationClass

4、如果配置类上存在@Component注解,那么解析配置类中的内部类(可递归)

5、如果配置类上存在@PropertySource注解,那么则解析该注解,并得到PropertySource对象,并添加到environment中去

6、如果配置类上存在@ComponentScan注解,则解析该注解,进行扫描,扫描得到一系列的BeanDefinition对象,然后判断这些BeanDefinition是不是也是配置类BeanDefinition(只要存在@Component注解就是配置类,所以基本上扫描出来的都是配置类),如果是则继续解析该配置类,并会生成对应的ConfigurationClass

7、如果配置类上存在@Import注解,则判断Import类的类型:如果是ImportSelector,那么调用执行selectImports方法得到类名,然后在把这个类当做配置类进行解析;如果是ImportBeanDefinitionRegistrar,那么则生成一个ImportBeanDefinitionRegistrar实例对象,并添加到配置类对象中(ConfigurationClass)的 importBeanDefinitionRegistrars属性中。

8、如果配置类上存在@ImportResource注解,则把导入进来的资源路径存在配置类对象中的importedResources属性中

9、如果配置类中存在@Bean方法,则把这些方法封装为BeanMethod对象,并添加到配置类对象中的beanMethods属性中

10、如果配置类实现了某些接口,则看这些接口内是否定义了@Bean的默认方法

11、如果配置类有父类,则把父类当做配置类进行解析

12、AppConfig这个配置类会对应一个ConfigurationClass,同时在解析的过程中也会生成另外的ConfigurationClass,然后会利用reader来进一步解析ConfigurationClass

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring源码解读(9)---解析配置类 的相关文章

  • 使用 LinkedList 实现下一个和上一个按钮

    这可能是一个愚蠢的问题 但我很难思考清楚 我编写了一个使用 LinkedList 来移动加载的 MIDI 乐器的方法 我想制作一个下一个和一个上一个按钮 以便每次单击该按钮时都会遍历 LinkedList 如果我硬编码itr next or
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • 动态选择端口号?

    在 Java 中 我需要获取端口号以在同一程序的多个实例之间进行通信 现在 我可以简单地选择一些固定的数字并使用它 但我想知道是否有一种方法可以动态选择端口号 这样我就不必打扰我的用户设置端口号 这是我的一个想法 其工作原理如下 有一个固定
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • 检测并缩短字符串中的所有网址

    假设我有一条字符串消息 您应该将 file zip 上传到http google com extremelylonglink zip http google com extremelylonglink zip not https stack
  • 将 MOXy 设置为 JAXB 提供程序,而在同一包中没有属性文件

    我正在尝试使用 MOXy 作为我的 JAXB 提供程序 以便将内容编组 解组到 XML JSON 中 我创建了 jaxb properties 文件 内容如下 javax xml bind context factory org eclip
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • 内部类的构造函数引用在运行时失败并出现VerifyError

    我正在使用 lambda 为内部类构造函数创建供应商ctx gt new SpectatorSwitcher ctx IntelliJ建议我将其更改为SpectatorSwitcher new反而 SpectatorSwitcher 是我正
  • 当 OnFocusChangeListener 应用于包装的 EditText 时,TextInputLayout 没有动画

    不能比标题说得更清楚了 我有一个由文本输入布局包裹的 EditText 我试图在 EditText 失去焦点时触发一个事件 但是 一旦应用了事件侦听器 TextInputLayout 就不再对文本进行动画处理 它只是位于 editText
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • 如何访问JAR文件中的Maven资源? [复制]

    这个问题在这里已经有答案了 我有一个使用 Maven 构建的 Java 应用程序 我有一个资源文件夹com pkg resources 我需要从中访问文件 例如directory txt 我一直在查看各种教程和其他答案 但似乎没有一个对我有
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程

随机推荐

  • python的后端库_【后端开发】python库是什么

    初学python的小伙伴一定遇到这样一个问题 python模块 python包 python库 感觉被绕晕了 今天说一说python中的模块 库 包有什么区别 1 python模块是 python模块 包含并且有组织的代码片段为模块 表现形
  • 2014年终总结——-我的匆匆这一年(面试,毕业季,工作)

    看看自己上一次写博客的时间 到现在已经快有一年了 这一年自己毕业 走上社会 感悟人生 当自己意识到该写今年的年终总结的时候 却发现不知道该从什么地方开始写 该写些什么了 还好 这一年让自己懂得不管什么事 如果已经发生 自己首先最不应该想的就
  • 空间点到直线垂足坐标的解算及C++实现

    假设空间某点O的坐标为 Xo Yo Zo 空间某条直线上两点A和B的坐标为 X1 Y1 Z1 X2 Y2 Z2 设点O在直线AB上的垂足为点N 坐标为 Xn Yn Zn 点N坐标解算过程如下 首先求出下列向量 由向量垂直关系 上式记为 1
  • STM32-USB之Buffer Description Table

    一 stm32的USB接口每个端点对应两个分组缓冲区 其地址与范围位于分组存储区 从STM32的数据手册中存储器映像 gt 寄存器组起始地址看到 注意地址范围大小为1024 APB1按32BIT对齐访问 但此SRAM是由256个16BIT字
  • gitlab CI/CD :创建一个复杂的pipeline流水线

    教程内容原文地址 Tutorial Create a complex pipeline 当前教程版本 16 1 文章目录 先决条件 创建一个项目来保存 Docusaurus 文件 创建初始CI CD的配置文件 添加一个job来构建站点 添加
  • msvcr110.dll丢失的解决方法?有哪些修复的方法?

    msvcr110 dll丢失要怎么办 相信很多人都遇到过这个dll文件丢失问题吧 突然电脑就弹出一个框框显示无法启动程序 那么遇到这种问题我们需要怎么去解决 有没有用什么好的方法推荐 下面我们一起来看看msvcr110 dll丢失的解决方法
  • G++ 编译选项(自用)

    fPIC 使用相对地址加载共享库 rdynamic 将所有链接库符号 添加到动态符号表 Wno unused variable 未使用变量不报警 Werror return type 有返回值的函数 不写return 报错 Wno depr
  • 区块链系统:签名

    签名算法是使用私钥签名 公钥验证的方法 对一个消息的真伪进行确认 如果一个人持有私钥 他就可以使用私钥对任意的消息进行签名 即通过私钥sk对消息message进行签名 得到signature signature sign message s
  • IOS 笔记大全 (UI控件到网络协议)

    1 MVC模式 model view controller 是一种帮你把代码功能和显示划分出来的设计模式 2 model 较为底层的数据引擎 负责管理实体中所继承的数据 3 view 和用户交互界面 4 controller 连接二者的桥梁
  • 202317读书笔记|《心寂犹似远山火:斋藤茂吉短歌300》——茫茫心海里,孤帆与谁同

    202317读书笔记 心寂犹似远山火 斋藤茂吉短歌300 茫茫心海里 孤帆与谁同 很高兴周五这一天 之前很粉俳句的时候订阅的书都在今天都上架了 可以一饱眼福了 短歌是日本和歌一种诗体 是由三十一音节组成的定型歌体 格式为 五七五七七 的排列
  • Linux安装OpenSSL

    安装openssl前先安装zlib cd usr local src wget https zlib net zlib 1 2 13 tar gz tar zxvf zlib 1 2 11 tar gz 目标地址可能变 可以到官网找到最新的
  • NVIDIA Nsight Systems 入门及使用

    目录 Nsight Systems 入门 什么是Nsight Systems 用户能用nsys做什么 CUDA Version Nsight Systems 使用 nsys windows 版本GUI使用步骤 nsys Linux CLI
  • 机器学习14(网格搜索调参)

    文章目录 简介 理论基础 调参目标 基于网格搜索的超参数调整方法 参数空间 交叉验证与评估指标 基于Scikit Learn的网格搜索调参 训练过程 多分类评估指标 F1 Score ROC AUC GridSearchCV进阶使用 构建全
  • jmeter使用非GUI,命令行模式进行压力测试

    一 启动jmeter 启动之后会有两个窗口 一个cmd窗口 一个JMeter的 GUI 前面不要忽略CMD窗口的提示信息 CMD窗口的提示信息 Don t use GUI mode for load testing only for Tes
  • 探究Facebook相似性搜索工具 faiss的原理

    探究Facebook相似性搜索工具的原理 它是一个能使开发者快速搜索相似多媒体文件的算法库 而该领域一直是传统的搜索引擎的短板 借助Faiss Facebook 在十亿级数据集上创建的最邻近搜索 nearest neighbor searc
  • ModuleNotFoundError: No module named ‘sklearn‘

    2 ModuleNotFoundError No module named sklearn 安装这个包之前需要先安装sklearn的依赖库 Numpy Scipy matplotlib pip install numpy pip insta
  • java 压缩 工具类_工具类:ZipUtil.java:文件压缩解压

    工具类 ZipUtil java 文件压缩解压 工具类 ZipUtil java 文件压缩解压 JavaWeb工具类目录 http baike xsoftlab net view 1059 html http baike xsoftlab
  • 安装VM虚拟机

    安装VM虚拟机 一 关闭防火墙 1 打开Windows设置 点击更新和安全 2 点击暂停Windows更新 并点击Windows安全中心 3 点击病毒和威胁防护 在 病毒和威胁防护 设置中的实时保护等关闭 4 在Windows安全中心中点击
  • 微信支付

    一 微信小程序支付开发步骤 1 统一下单 1 1 准备参数 接口链接 https api mch weixin qq com pay unifiedorder 需要参数 param string appid 小程序ID param stri
  • Spring源码解读(9)---解析配置类

    Spring源码解读 9 解析配置类 解析配置类 1 在启动Spring时 需要传入一个AppConfig class给ApplicationContext ApplicationContext会根据AppConfig类封装为一个BeanD