[TOC]
BeanDefinition
- BeanDefinition是配置文件
元素标签在容器中的内部表示。 元素标签有class,scope,lazy-init等配置属性,BeanDefinition则提供对应的beanClass,scope,lazyInit类属性。BeanDefinition与 一一对应 - uml图
- RootBeanDefinition是最常用的实现类,它对应一般性的
元素标签。在配置文件中可以定义父 和子 ,父 用RootBeanDefinition表示,子 用ChildBeanDefinition表示,而没有父 的Bean用RootBeanDefinition表示。 - Spring通过BeanDefinition将配置文件中的
配置信息转换为容器的内部表示,并将这些BeanDefinition注册到BeanDefinitionRegistry中。Spring容器的BeanDefinitionRegistry就像Spring配置信息的内存数据库,后续操作直接冲BeanDefinitionRegistry中读取配置信息。 - 创建最终的BeanDefinition主要包括两个步骤
- 利用BeanDefinitionReader读取承载配置信息的Resource,通过xml解析器解析配置信息的DOM对象,简单为每个
生成对应的BeanDefinition对象。但是这里生成的BeanDefinition可能是半成品,因为在配置文件中,可能通过占位符变量引用外部属性文件的属性,这些占位符变量引用外部属性文件的属性,这些占位符在这一步还没有解析出来 - 利用容器中注册的BeanFactoryPostProcessor对半成品的BeanDefinition进行加工处理,将以占位符表示的配置解析为最终的实际值,这样半成品的BeanDefinition就成为成品的BeanDefinition。
- 利用BeanDefinitionReader读取承载配置信息的Resource,通过xml解析器解析配置信息的DOM对象,简单为每个