探秘Spring中的BeanDefinition:每个Bean都是一个独特的“小镇居民”


theme: orange

前言介绍

在Spring框架中,核心思想之一就是将应用程序中的各种组件,例如对象、服务、数据源等,都抽象为Spring Bean,并将它们注册到Spring容器中。这种注册的方式提供了一种基于IoC(Inversion of Control,控制反转)的管理方式,即不再由应用程序主动去创建和管理对象,而是由Spring容器负责管理和注入这些对象。

而BeanDefinition是用来描述和定义Bean的元数据对象。BeanDefinition包含了关于Bean的各种信息,如类名、属性值、构造函数参数等。它允许Spring容器在运行时动态地创建Bean实例。

BeanDefinition内容介绍

BeanDefinition的内容包括:

  • Bean的全限定类名(包含包名)
  • Bean行为配置元素,如作用域、自动绑定、生命周期回调等
  • 其他Bean引用,又称合作者(Collaborators)或者依赖(Dependencies)
  • 设置配置,如Bean属性(Properties)

元数据这个关键词对于初学者来说比较抽象,在本文中我将把Bean比作一个小镇居民这个形象的例子来帮助大家理解Bean的元数据和BeanDefinition。

居住地址:全限定类名

想象一下,小镇中的每个居民都有一个独特的住址,就像Spring中的Bean有全限定类名一样。这个地址告诉小镇居民们在哪里找到彼此,就像Spring容器通过全限定类名找到相应的Bean一样。

个人特征:属性值

每个小镇居民都有独特的个人特征,比如身高、体重等。同样,每个Bean也有独特的属性值,定义了它们的状态和特征。这些属性值就像小镇居民的个人特征,构成了Bean的独特个性。

初始状态与基本特征:构造函数参数

小镇居民的初始状态或基本特征可以通过构造函数参数来定义,就像Bean的构造函数参数定义了Bean实例的初始状态。这是小镇居民们出生时所具有的基本特征。

人际关系:依赖项

在小镇中,居民之间存在各种各样的人际关系。Bean之间的依赖项也是如此,它们定义了Bean之间的联系和协作关系。一个Bean可能需要依赖其他Bean,就像居民之间建立各种关系一样。

生活范围:作用域

每个小镇居民都有自己的生活范围,就像Bean的作用域定义了它们在容器中的存在方式。有的居民在整个小镇中独一无二,而有的居民可能每次都是新面孔。

  1. 有的居民在整个小镇中独一无二:
    • 这是指某些Bean被配置为单例作用域。在Spring中,单例作用域意味着在整个应用程序中只有一个Bean实例。无论有多少次请求该Bean,都将获得相同的实例。这就好比小镇上的某个居民,在整个小镇中只有一个独特的存在。
  1. 有的居民可能每次都是新面孔:
    • 这表达了某些Bean被配置为原型(多例) 作用域。在Spring中,原型作用域表示每次请求该Bean时都会创建一个新的实例。无论有多少次请求,都会得到一个全新的Bean实例,就像小镇上的某些居民每次都是新的面孔,不同于之前的居民。

生命周期阶段:生命周期回调

小镇居民在生命周期中经历各种阶段,比如出生、成年、离世等。Bean的生命周期回调方法就像小镇居民在不同阶段执行的各种活动,为Bean的生命周期增加了更多的精彩和灵活性。

通过这个生动的小镇比喻,我们更容易理解BeanDefinition的各个方面。在Spring的世界里,每一个Bean都是这个小镇独特的居民,而BeanDefinition则是定义了这些居民的规范,让整个小镇充满活力。

后续内容文章持续更新中…

近期发布。


关于我

👋🏻你好,我是Debug.c。微信公众号:种棵代码技术树 的维护者,一个跨专业自学Java,对技术保持热爱的bug猿,同样也是在某二线城市打拼四年余的Java Coder。

🏆在掘金、CSDN、公众号我将分享我最近学习的内容、踩过的坑以及自己对技术的理解。

📞如果您对我感兴趣,请联系我。

若有收获,就点个赞吧,喜欢原图请私信我。

wallhaven-x6wjkv.png

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

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

相关文章

Unity 点击对话系统(含Demo)

点击对话系统 可实现点击物体后自动移动到物体附近,然后弹出对话框进行对话。 基于Unity 简单角色对话UI脚本的编写(新版UI组件)和Unity 关于点击不同物品移动并触发不同事件的结合体,有兴趣可以看一下之前文章。 下边代码为U…

HTML5-简单文件操作

文件操作 简介 概念&#xff1a;可以通过file类型的input控件或者拖放的方式选择文件进行操作 语法格式&#xff1a; <input type"file" multiple>属性 multiple&#xff1a;表示是否选择多个文件 accept&#xff1a;用于设置文件的过滤类型&#xff08;MI…

Sharding-JDBC快速使用【笔记】

1 引言 最近在使用Sharding-JDBC实现项目中数据分片、读写分离需求&#xff0c;参考官方文档&#xff08;Sharding官方文档&#xff09;感觉内容庞杂不够有条理&#xff0c;重复内容比较多&#xff1b;现结合项目应用整理笔记如下供大家参考和自己回忆使用&#xff1b; 在…

前端uniapp的tab选项卡for循环切换、开通VIP实战案例【带源码/最新】

目录 效果图图1图2 源码最后 这个案例是uniapp&#xff0c;同样也适用Vue项目&#xff0c;语法一样for循环&#xff0c;点击切换 效果图 图1 图2 源码 直接代码复制查看效果 <template><view class"my-helper-service-pass"><view class"tab…

实时数据处理概述与Spark Streaming简介

实时数据处理已经成为当今大数据时代的一个重要领域&#xff0c;它使组织能够及时分析和采取行动&#xff0c;以应对不断变化的数据。Spark Streaming是Apache Spark生态系统中的一个模块&#xff0c;专门用于实时数据处理。本文将深入探讨实时数据处理的概念&#xff0c;并介绍…

[C#]C# OpenVINO部署yolov8图像分类模型

【官方框架地址】 https://github.com/ultralytics/ultralytics.git 【算法介绍】 YOLOv8 抛弃了前几代模型的 Anchor-Base。 YOLO 是一种基于图像全局信息进行预测的目标检测系统。自 2015 年 Joseph Redmon、Ali Farhadi 等人提出初代模型以来&#xff0c;领域内的研究者们…

LeetCode 2807. 在链表中插入最大公约数

给你一个链表的头 head &#xff0c;每个结点包含一个整数值。 在相邻结点之间&#xff0c;请你插入一个新的结点&#xff0c;结点值为这两个相邻结点值的 最大公约数 。 请你返回插入之后的链表。 两个数的 最大公约数 是可以被两个数字整除的最大正整数。 示例 1&#xf…

【亚马逊云科技】自家的AI助手 - Amazon Q

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…

NVMe SSD IO压力导致宕机案例解读-1

近日&#xff0c;小编在内核pci模块变更提交记录里面&#xff0c;看到一条由联想工程师提交的一份变更&#xff0c;主要是针对DMA相关优化。小编根据提交内容&#xff0c;根据自己的理解分享给大家。&#xff08;原始git地址获取&#xff0c;请在后台私信输入关键字“IO宕机”&…

【模拟电路】EDA软件、绘制原理图和PCB

一、EDA软件 二、常用的PCB的EDA软件 三、PCB生产工艺制造流程 四、国产嘉立创EDA专业版使用 五、EDA软件-绘制开关电路原理图 六、原理图转PCB绘制 七、检查DRC 八、PCB下单流程 一、EDA软件 EDA是电子设计自动化&#xff08;Electronic Design Automation&#xff09;的缩写…

清风数学建模排版

Overview 链接&#xff1a;https://pan.baidu.com/s/11QBw3zBFNicwQWvWCfW1Gg?pwdepnz 提取码&#xff1a;epnz Latex 范文排版练习 b站刘海洋latex工作室&#xff0c;待还愿 Word基础 Word VBA&#xff0c;待还愿 fnF4&#xff1a;重复上一步操作 ctrlY&#xff1a;恢…

视频通话录制 方案 教程

一些基本概要 1 市面流行的音视频产品&#xff0c;都包含一对一、一对多、多对多通话&#xff0c;云端录制等这些基本功能&#xff0c;有些厂商支持本地服务录制。 2 本地服务录制&#xff0c;云端录制区别 两个录制区别在于&#xff0c;本地服务端录制的 SDK 要求部署在 …