IoC从原理上说非常简单,就是把xml文件解析出来,然后放到内存的map里,最后在内置容器里管理bean。但是看IoC的源码,却发现非常庞大,看着非常吃力。因为spring加入了很多特性和为扩展性预留很多的接口,这导致了他的复杂性。国内有人写了本书叫《Spring 技术内幕》,老实说分析的还可以,但是语言组织上实在不敢恭维,思维跳跃非常严重,有些废话也太多了点,本来代码就复杂,看着这本书就觉得像被作者带着绕树好几圈。撇开那些增强和为扩展预留的接口,IoC最核心的就是容器的初始化和依赖的注入。
- 容器的初始化做了几件事情:
- 资源的定位,就是定位你配置的xml文件
- 对resource文件进行解析,解析成spring 定义的BeanDefinition
- 对BeanDefinition 进行注册,其实就相当于把BeanDefinition 放到一个HashMap
- 依赖的注入:
- 根据BeanDefinition创建Bean实例
- 为Bean注入依赖的实例
下面的图很直观的看到:(from: http://blog.csdn.net/cutesource/article/details/6132650 )