Spring IOC ( 四 ) : BeanDefinition( )

系统 1520 0

 BeanDefinition
org.springframework.beans.factory.config.BeanDefinition 是配置文件<bean>元素标签在容器中内部表示形式。
<bean>元素标签拥有class、scope、lazy-init等配置属性,
BeanDefinition 则提供了相应的beanClass、scope、lazyInit属性, BeanDefinition 就像是<bean>的镜中人,两者是一一对应的。 BeanDefinition 接口的继承结构如图5-2所示。

Spring IOC ( 四 ) : BeanDefinition(  )
图5-2  BeanDefinition类继承结构
RootBeanDefinition 是最常用的实现类,它对应一般性的<bean>元素标签。我们知道在配置文件中可以定义父<bean>和子<bean>,父<bean>用 RootBeanDefinition 表示,而子<bean>用 ChildBeanDefiniton 表示,而没有父<bean>的<bean>就使用 RootBeanDefinition 表示。 AbstractBeanDefinition 对两者共同的类信息进行抽象。
Spring通过 BeanDefinition 将配置文件中的<bean>配置信息转换为容器的内部表示,并将这些 BeanDefiniton 注册到 BeanDefinitonRegistry 中。Spring容器的 BeanDefinitionRegistry 就像是Spring配置信息的内存数据库,后续操作直接从 BeanDefinitionRegistry 中读取配置信息。一般情况下, BeanDefinition 只在容器启动时加载并解析,除非容器刷新或重启,这些信息不会发生变化,当然如果用户有特殊的需求,也可以通过编程的方式在运行期调整 BeanDefinition 的定义。
创建最终的 BeanDefinition 主要包括两个步骤:
1)利用 BeanDefinitionReader 对配置信息 Resource 进行读取,通过XML解析器解析配置信息的DOM对象,简单地为每个<bean>生成对应的 BeanDefinition 对象。但是这里生成的 BeanDefinition 可能是半成品,因为在配置文件中,我们可能通过占位符变量引用外部属性文件的属性,这些占位符变量在这一步还没有被解析出来。
2)利用容器中注册的 BeanFactoryPostProcessor 对半成品的 BeanDefinition 进行加工处理,将以占位符表示的配置解析为最终的实际值,这样半成品的 BeanDefinition 就为成品的 BeanDefinition

Spring IOC ( 四 ) : BeanDefinition( )


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论