spring IOC 源码解析
http://www.cnblogs.com/ITtangtang/p/3978349.html#a1
简要总结:
spring IOC:spring IOC 负责生成对象并管理对象之间的依赖关系
BeanFactory:是顶层接口,定义了spring bean容器的功能,如getBean等方法,spring提供了多种BeanFactory的实现(即容器),如ApplicationContext,XmlBeanFactory等
ApplicationContext:拓展了国际化、事件发布等功能,与BeanFactory的区别是:在应用启动时加载bean,BeanFactory是在调用getBean时加载bean的,即延迟加载
BeanDefinition:用来描述spring bean定义
IoC容器的初始化包括BeanDefinition的Resource定位、载入和注册这三个基本的过程,部分API如下:
AbstractBeanDefinitionReader读取Bean定义资源
DefaultResourceLoader的getResource方法获取要加载的资源
BeanDefinitionParserDelegate解析Bean定义资源文件中的<Bean>元素
当Spring IoC容器完成了Bean定义资源的定位、载入和解析注册以后,IoC容器中已经管理类Bean定义的相关数据,但是此时IoC容器还没有对所管理的Bean进行依赖注入,依赖注入在以下两种情况发生:
(1).用户第一次通过getBean方法向IoC容索要Bean时,IoC容器触发依赖注入。
(2).当用户在Bean定义资源中为<Bean>元素配置了lazy-init属性,即让容器在解析注册Bean定义时进行预实例化,触发依赖注入。
BeanPostProcessor是一个接口,其初始化前的操作方法和初始化后的操作方法均委托其实现子类来实现,在Spring中,BeanPostProcessor的实现子类非常的多,分别完成不同的操作,如:AOP面向切面编程的注册通知适配器、Bean对象的数据校验、Bean继承属性/方法的合并等等