解析BeanDefinition之创建用于属性承载的BeanDefinition。
来源:互联网 发布:淘宝中长高精油可靠吗 编辑:程序博客网 时间:2024/05/24 03:34
BeanDefinition是一个接口,在Spring中存在三种实现:RootBeanDefinition、ChildBeanDefinition以及GenericBeanDefinition。三种实现均继承了AbstractBeanDefinition,其中BeanDefinition是配置文件<bean>元素标签在容器中的内部表示形式。<bean>元素标签拥有class、scope、lazy-init等配置属性,BeanDefinition则提供了相应的beanClass、scope、lazyInit属性,BeanDefinition和<bean>中的属性是一一对应的。其中RootBeanDefinition是最常用的实现类,它对应一般性的<bean>元素标签,GenericBeanDefinition是自2.5版本以后新加入的bean文件配置属性定义类,是一站式服务类。
在配置文件中可以定义父<bean>和子<bean>,父<bean>用RootBeanDefinition表示,而子<bean>用ChildBeanDefinition表示,而没有父<bean>的<bean>就使用RootBeanDefinition表示。AbstractBeanDefinition对两者共同的类信息进行抽象。
Spring通过BeanDefinition将配置文件中<bean>配置信息转换为容器的内部表示,并将这些BeanDefinition注册到BeanDefinitionRegistry中。Spring容器的BeanDefinitionRestry就像是Spring配置信息的内存数据库,主要是以map的形式保存。后续操作直接从BeanDefinitionRegistry中读取配置信息。
由此可知,要解析属性首先要创建用于承载属性的实例,也就是创建GenericBeanDefinition类型的实例。
// 创建用于承载属性的AbstractBeanDefinition类型的GenericBeanDefinition
AbstractBeanDefinition bd = createBeanDefinition(className, parent);
// 创建GenericBeanDefinition类型的实例。
BeanDefinitionReaderUtils.createBeanDefinition(parentName, className, this.readerContext.getBeanClassLoader());
在BeanDefinitionReaderUtils.java中,
GenericBeanDefinition bd = new GenericBeanDefinition();
//parentName可能为空
bd.setParentName(parentName);
// 如果classLoader不为空,则使用以传入的classLoader同一虚拟机加载类对象,
bd.setBeanClass(ClassUtils.forName(className, classLoader));
// 否则只是记录className
bd.setBeanClassName(className);
- 解析BeanDefinition之创建用于属性承载的BeanDefinition。
- 解析BeanDefinition之解析各种属性。
- 解析BeanDefinition。
- 解析BeanDefinition之解析子元素meta.
- BeanDefinition封装的信息
- spring BeanDefinition的加载
- 解析BeanDefinition之解析子元素lookup-method。
- 解析BeanDefinition之解析子元素replaced-method
- spring 技术内幕--IOC初始化过程深入之BeanDefinition的载入和解析1
- bean标签的解析及注册(二)解析BeanDefinition
- 深入理解Spring系列之二:BeanDefinition解析
- SpringIoC初始化BeanDefinition解析——从Resource到BeanDefinition
- SpringIoC初始化BeanDefinition解析——Resource的定位
- spring源码(8)注册解析的BeanDefinition
- Spring 源码之 BeanDefinition阅读
- spring源码阅读(六)之BeanDefinition的载入
- spring beandefinition
- spring BeanDefinition
- 算术表达式求值
- 如何完全禁用或卸载Windows 10中的OneDrive
- thinkphp&redis
- leetcode105. Construct Binary Tree from Preorder and Inorder Traversal
- Android 接受广播唤醒屏幕
- 解析BeanDefinition之创建用于属性承载的BeanDefinition。
- SpringMVC测试@Test
- JS实现二维数组案例 矩阵转置
- 在selenium中设置代理ip
- 多线程实现的第三种有返回值的方法
- 剑指Offer——n个骰子的点数
- JSP自定义标签-第一个简单的例子
- parseInt
- leetcode31. Next Permutation