微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spring容器技术内幕之BeanDefinition类介绍

引言

org.springframework.beans.factory.config.BeanDeFinition是配置文件< bean >元素标签在容器中地内部表示。< bean >元素标签拥有class、scope、lazy-init等配置属性,BeanDeFinition则提供了相应地beanClass、scope、lazyInit类属性,BeanDeFinition就像< bean >中镜中人,二者是一一对应地。

实现类

RottBeanDeFinition是最常用地实现类,它对应一般性地< bean > 元素标签。我们知道,在配置文件中可以定义父< bean >和子< bean >,父< bean >用RootBeanDefiniton表示,子< bean >用ChildBeanDeFinition表示,而没有父< bean >的< bean >则用RootBeanDeFinition表示。AbstractBeanDefintion对二者共同的类信息进行抽象。
Spring配置文件通过BeanDefintion将配置文件中的< bean >配置信息转换为容器的内部表示,并将这些BeanDeFinition注册到BeanDeFinitionRegistry中。spring容器的BeanDefintionRegistry就像Spring配置信息的内存数据库,后续操作直接从BeanDefintionRegistry中读取配置信息。一般情况下,BeanDeFinition只在容器启动时加载并解析,除非容器刷新或重启,这些信息不会发生变化。当然,如果用户有特殊的需求,也可以通过编程的方式在运行期调整BeanDeFinition的定义。

创建BeanDeFinition

创建BeanDeFinition主要包括两个步骤:

  1. 利用BeanDeFinitionReader读取承载配置信息的Resource,通过XML解析器解析配置信息的DOM对象,简单地每个< bean >生成对应地BeanDeFinition对象。但是这里生成的BeanDeFinition可能是半成品,因为在配置文件中,可能通过占位符变量引用外部属性文件属性,这些占位符变量在这一步里还没有被解析出来;
  2. 利用容器中注册的BeanFatoryPostProcessor对半成品的BeanDeFinition进行加工处理,将以占位符表示的配置解析为最终的实际值,这样半成品的BeanDeFinition就成为成品的BeanDeFinition。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐