IOC容器构造之注册BeanDefinition源码分析
来源:互联网 发布:retintex算法 编辑:程序博客网 时间:2024/06/05 10:04
解析完配置文件,接下来便是BeanDefinition的注册了。为了不至于每次用到配置信息的时候都去解析一遍配置文件,我们需要将解析结果保存起来。而保存解析结果这个过程就是BeanDefinition的注册。既然是保存,那就需要一个保存的容器,这个容器就是HashMap。于是BeanDefinition的注册就变成了将解析之后的BeanDefinition信息保存在HashMap中这样一个操作。具体实现过程,请看源码分析。
注册从BeanDefinitionReaderUtils类的registerBeanDefinition方法开始。
从代码中可以看出,BeanDefinition的注册分成了两部分,通过beanName的注册和通过别名的注册。先来分析通过beanName注册BeanDefinition的方式。
registry此时的类型是DefaultListableBeanFactory,那进入DefaultListableBeanFactory的 registerBeanDefinition方法。
这个方法中先判断是不是有相同名字的BeanDefinition已经注册过了,如果有,但是不允许覆盖,那么只能让程序抛出异常。如果没有相同的名字注册过,那就执行正常的注册过程,以beanName为key,BeanDefinition为value保存在beanDefinitionMap中。
接下来再看通过别名注册BeanDefinition的方式。
通过别名注册的方式也比较简单,如果beanName和别名相同的话,就从aliasMap中删掉别名。为什么要删掉呢?因为别名和beanName相同,在获取BeanDefinition的时候,不管是根据beanName来获取还是根据别名来获取,key都是一样,所以这样的别名没别要保存起来。如果beanName和别名不相同的话,就把别名当做key,beanName当做value保存在aliasMap中,到此BeanDefinition注册完成。当然,在分析源码的过程中可能有些地方没有分析到。前面也有提到,我们分析是主线,也就是主要的过程,至于非常细节的部分,感兴趣的朋友也可以自己研究下,毕竟Spring源码是如此的博大精深。
总结:BeanDefinition的注册过程实质就是将BeanDefinition保存在以beanName为key,BeanDefinition为value的Map中的过程。到此IOC容器已经构建好,但这时的IOC容器还只是光有一个壳,没有内容。我们知道IOC容器的作用是管理对象之间的引用关系,也就是对象之间的引用关系还没有填充到IOC容器里面。那么下面要做的事就是去填充IOC容器。
未完待续。。。。。。
- IOC容器构造之注册BeanDefinition源码分析
- Spring源码阅读之IoC容器初始化3 -- BeanDefinition在IoC容器中的注册
- Spring源码分析--Ioc容器定位解析资源文件并注册BeanDefinition
- Spring源码解析-BeanDefinition在IOC容器中的注册(三)
- Spring源码阅读--BeanDefinition 在 IOC 容器中的注册
- BeanDefinition在IOC容器中的注册
- spring 技术内幕--IOC初始化之BeanDefinition的在IOC容器中的注册
- IOC容器构造之资源文件定位源码分析
- 【Spring源码--IOC容器的实现】(四)BeanDefinition的注册
- Spring源码阅读之IoC容器初始化2 -- BeanDefinition载入与解析
- Spring源码分析----IOC容器的实现(IoC容器的初始化过程(定位、载入解析、注册))
- Spring源码解读-Spring IoC容器初始化之资源注册
- Blade源码深入探索1--注册路由之ioc容器
- 【Spring Framework 深入】—— IoC容器初始化 -> BeanDefinition的注册
- spring技术内幕笔记:IoC容器的初始化过程(3)- BeanDefinition的注册
- spring源码阅读(八)之BeanDefinition注册
- SPRING源码分析:IOC容器
- 【Spring源码--IOC容器的实现】(二)BeanDefinition的Resource定位
- 开发不规范,多加分号“;”带来的错误
- Android Activtity Security
- Codeforces 631A Interview(分析&&位运算| )
- ubuntu 12.04 Server 上安装 nodejs, MongoDB
- 基础练习 查找整数
- IOC容器构造之注册BeanDefinition源码分析
- Linux多线程编程之线程控制
- UITextField实现PlaceHolder
- 使用VS调试高效修改代码(poj 3984为例)
- maven的环境配置
- 栈
- 进程和线程、并发和并行
- IBM MQ 错误代码 2009 目标“”注册回调失败 有时伴随有2059
- Android Drawable 那些不为人知的高效用法