首页 > 其他分享 >03各种概念

03各种概念

时间:2024-07-17 09:52:31浏览次数:13  
标签:03 各种 后置 概念 bean 实例 处理器 BeanDefinition

1、BeanDefinition概念(辅助Class概念从而实现spring世界的基石)
spring的世界里,把bean的信息(bean与别的bean的关系,bean自身各属性的值)
封装到BeanDefinition,
这样实例化bean时能更加丰富,有了BeanDefinition就不再是用newInstance方法
实例化出一个个光秃秃的对象,而是把对象之间互相建立关系,并把bean充实为
有血有肉的活物。
注:如果你来实现根据xml实例化bean需求,必定会定义类x代表xml里每个
bean的信息,然后根据x来实例化而不是根据xml字符串实例化,这个x就是
BeanDefinition。

2、Bean概念
其实就是对象概念,我这里虚构Bean名词为了方便理解下面别的概念

3、BeanFactory概念
就是个工厂,最出名的方法是getBean(xxx)方法。
注:可以把它当作华强北生产手机的小作坊,内部有很多有特色的组件
(各种有特殊技能的工人)协助生产bean(手机),比如zzz组件能够支持读取
xml里带有ENC(xxx)属性(这是jasypt组件约定的加密后的属性形式)的属性字符
串转成bean的正常属性。

4、BeanFactoryPostProcessor概念
BeanFactory后置处理器,查看该方法doc可知该类的对象用于当BeanFactory实例
化之后,框架提供一个时机(spring框架在实例化BeanFactory后调用BeanFactory
后置处理器的postProcessBeanFactory(beanfactory对象)方法)满足开发者修改
BeanFactory的个性化需求,比如CustomEditorConfigurer的postProcessBeanFactory
方法里给beanFactory增加新的PropertyEditorRegistrar组件。
注:定义若干这种后置处理器,能实现给beanfactory增加自定义组件的功能。

5、BeanDefinitionRegistry概念
BeanFactory还有一个角色就是作为BeanDefinitionRegistry概念,该概念提供的
最有用方法是注册BeanDefinition--->registerBeanDefinition方法。
注:可以认为一开始beanFactory既有getBean(xxx)方法又有
registerBeanDefinition方法,后来拆分成两个接口。也可以认为作者单纯
就是想给beanfactory起个艺名叫BeanDefinitionRegistry,社会上知道该名字
的人只会知道BeanDefinitionRegistry下的方法即注册BeanDefinition功能。

6、BeanDefinitionRegistryPostProcessor概念
BeanDefinitionRegistry后置处理器,通过doc可知该后置处理器扩展自
BeanFactoryPostProcessor概念,该后置处理器用于调用beanfactory的另一个角色
BeanDefinitionRegistry概念来实现自定义注册BeanDefinition的个性化需求。
注:定义若干这种后置处理器,能实现往beanfactory增加自定义BeanDefinition的功能。

7、BeanPostProcessor概念
Bean后置处理器,通过doc可知该后置处理器用于修改实例化前后的bean,比如
给bean套一层代理对象或修改bean的属性值。
注:定义若干这种后置处理器,能实现个性化Bean的功能。

总结:上面BeanFactoryPostProcessor、BeanDefinitionRegistryPostProcessor
、BeanPostProcessor分别实现给beanFactory增加自定义帮助实例化bean的组件、
往beanFactory增加自定义BeanDefinition、个性化修改bean三种功能,满足实例化
bean过程的方方面面。spring框架在实例化bean时会调用这三类概念的对象来
实现预定的个性化需求功能。

标签:03,各种,后置,概念,bean,实例,处理器,BeanDefinition
From: https://www.cnblogs.com/bplan/p/18306661

相关文章

  • LVM FS NFS CIFS NAS 等存储概念解析
    存储:    LVM:存储的格式,块存储。    FS:文件系统,在LVM的创建的磁盘的基础上,安装FS,形成了文件存储。    NFS:Unix系统间实现磁盘文件共享的一种方法,支持应用程序在客户端通过网络存取位于服务器磁盘中数据的一种文件系统协议。其实它包括许多种协议,最简单的网络文......
  • P10378 [GESP202403 七级] 交流问题题解
    思路我们把关系想成一张图,每次输入就给两个人连一条边。因为一个人只有两种选择,所以我们在一个联通块内随便找一个点,跑一遍搜索,找出这个联通块内的答案。代码如下。voiddfs(intu,intcolor){cnt2++;//cnt2是这个连通块内的总点数cnt1+=color;//这个是一所学校内......
  • 2024-07-16 使用了.md文件作为路由文件来引用,在开发中能正常显示,打包的时候就报错了:Ca
    我使用了.md文件作为路由文件来引用,在开发中能正常显示,打包的时候就报错了//vite.config.ts import{defineConfig}from'vite'; importvuefrom'@vitejs/plugin-vue'; importmarkdownfrom"vite-plugin-md"; exportdefaultdefineConfig({  plugin......
  • iOS开发基础105-Xcode收集Crashs的各种方法
    Xcode提供了一整套工具和功能来帮助开发者收集、分析和处理应用崩溃报告。通过这些工具,开发者可以追踪和解析崩溃日志,以更加准确和及时地修复问题。以下是详细介绍Xcode工具收集崩溃报告的各种方法。一、通过设备获取崩溃报告1.连接设备将iOS设备通过USB连接到您的Mac......
  • 了解一下人工智能(AI)相关概念
    人工智能(AI)不仅仅是一个技术流行语,其是一种迅速重塑我们生活和工作方式的变革力量。当我们站在一个新时代的顶端时,人工智能技术已经做好了未来的准备,在各个领域释放出前所未有的可能性。现在各种关于人工智能的技术层出不穷,每种不同的技术所针对的技术重点不同,现在就让我们根据......
  • iOS开发基础103-APP之间跳转
    iOS提供了多种方式来实现应用之间的相互跳转。其中,URLSchemes和UniversalLinks是两种主要的方法。下面详细介绍这两种方法,并提供相应的示例代码,同时对它们的优缺点进行分析。一、URLSchemes1.什么是URLSchemesURLSchemes是一种基于URL的通讯方式,允许一个应用通过指定的UR......
  • CodeForces 1992E Novice's Mistake
    题目链接:CodeForces1992E【Novice'sMistake】思路    直接对a,b枚举肯定会超时,因为a,b数数字过大,但是通过结果a*n-b可以发现结果最多为6位数,所以对结果的位数进行枚举,然后枚举a,来计算出b并判断是否符合题意,同时需要去掉b不符合题目的范围的情况。代码#includ......
  • [1033] Run the batch file of the PyQt GUI, but don't show the CMD
    IbuiltaGUIlayoutusingPyQt,andIrunthePythonfilewitha.batfile.However,thismethodinitiallydisplaystheCMDwindowbeforeshowingtheprogram'smainwindow,whichlooksabitodd.TopreventorminimizetheCMDwindowfromappearing,......
  • rust各种库
    ndarrayndarray是NumPy库中的一个核心数据结构,它是一个用于表示多维数组的对象。ndarray在存储和操作大型多维数组时非常高效,广泛应用于科学计算、数据分析、机器学习等领域。在Rust开发中,ndarray库可以作为替代 NumPy库。Github地址:https://github.com/rust-ndarra......
  • WPF ListBox's itemsource depend on another listbox's selecteditem
    //xaml<ListBoxGrid.Row="1"Grid.Column="0"ItemsSource="{Binding}"x:Name="countryLbx"DisplayMemberPath="CountryName"/><ListBoxGrid.Row="1"Grid.Column="1&......