您所在的位置: 首页>>读书频道>>设计开发>>Java系列>>

5.1.2 BeanDefinition

http://book.51cto.com  2007-08-09 13:23  陈雄华  电子工业出版社博文视点  我要评论(0)
5.1.2  BeanDefinition
org.springframework.beans.factory.config.BeanDefinition是配置文件<bean>元素标签在容器中内部表示形式。<bean>元素标签拥有class、scope、lazy-init等配置属性,BeanDefinition则提供了相应的beanClass、scope、lazyInit属性,BeanDefinition就像是<bean>的镜中人,两者是一一对应的。BeanDefinition接口的继承结构如图5-2所示。
图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框架源码类包层次结构清晰,但包名很长。在IDE的环境下,这不是问题,但是却给书面表达带来了困难。为了行文的方便,我们常常将Spring类的包名省略。如果用户希望了解类位于哪个具体的包中,在Eclipse中,可以通过Ctrl+Shift+R,输入类名,Eclipse将自动查找出这个类。在JBuilder中,可以通过Ctrl+Alt+H完成相似的功能。另外推荐一个小工具:Search and Replace,它被称作文件内容搜索工具中的“倚天剑”,用户可以通过这个工具,根据类名快速搜索出它所在的类包。
【责任编辑:雪花 TEL:(010)68476606-8007】

回书目   上一节   下一节
深入Vista应用程序开发
网络应用性能控管最佳实践
如何有效提升企业安全审计应用水平
让你的代码“炫”起来——WPF开发教程
虚拟存储管理与应用
 
 验证码: (点击刷新验证码)   匿名发表
  • Visual C++ 完全自学宝典

  • 作者:强锋科技,朱洪波
  • Visual C++ 6.0是微软公司为程序人员提供的Visual Studio 6.0工具套件中的重要组成部分。本书由浅入深地介绍使用Visual C++ 6.0..
Copyright©2005-2008 51CTO.COM 版权所有