BeanDefinition整体介绍

经过前面的 Spring源码Ioc核心模块分析 的内容介绍之后我想相对刚开始看文章还是比较友好的,目前本文当中主要就是介绍一下,Spring 在运行的时候我们在 xml 所编写的内容它是如何帮我们解析和加载的

容器初始化过程

Spring 解析的 简略 步骤大致是如下几步:

  1. 解析配置
  2. 定位与注册对象

image-20220101113451513

然后我们来介绍一下源码,打开 idea 按两下 shift 搜索 BeanDefinition

image-20220101115441252

然后鼠标移动到接口上面按 ctrl + alt + shift + u 打开 UML 信息如下:

image-20220101120106084

然后我们只需要关注如下我给出了这些抽象类和实现类即可,具体怎么弄出来的不会的可以去观看我之前发布的 UML 相关概述和使用:

image-20220101121217351

BeanDeifnition 是一个接口,是定义在 spring-beans 模块当中:

image-20220101121504716

  • AttributeAccessor:定义了基本的对任意对象的元数据的修改或者获取方法,在 BeanDefinition 当中用过获取其中的属性,并对这些属性进行操作
  • BeanMetadataElement:主要是反回 BeanDefinition 这个 Class 对象本身

BeanDefinition 实现类

  • AbstractBeanDefinition:定义了公用的构造函数,子类可以通过这些构造函数给通过的属性进行赋值,还定义了一些用属性的 get 与 set 方法,方便对通过的属性赋值,还提供了一些公用的工具方法,设置一些全量初始值
  • RootBeanDefinition:它可单独做为 BeanDefinition,也可以做为其它 Definition 的父类,不能做为其它 Definition 的子类,在 spring 当中设置父子关系不是通过 extends 继承,使用 parent 引用来指定父子之间的关系

image-20220101121913651

RootBeanDefinition 通常用来在运行时接收多个 BeanDefinition。合并起来的信息。一般情况下配置里面的信息会被解析成 RootBeanDefinition,在 spring2.5 之后解析成了 GenericBeanDifinition

  • GenericBeanDefinition:虽然使用 GenericBeanDefinition 取代,但由于之前使用 RootBeanDefinition 比较多,在内部还是会使用 RootBeanDefinition 来接收,在 DefaultListableBeanFactory 类当中,它具有其它 BeanDefinition 特征之外, 可以设置 parent 属性, 方便程序在运行时, 设定父的 Definition

在 idea 当中使用全局搜索 doGetBeanNamesForType

image-20220101122323304

  • ChildBeanDefinition:不能单独存在, 必须要依赖于一个父的 Definition,现在已经完全被 GenericDefinition 取代
posted @   BNTang  阅读(200)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示