spring技术内幕
1 ioc
控制反转和依赖注入,把对象的构造、依赖管理的控制权从用户代码中反转到spring容器中,由容器来管理复杂的对象和对象之间的关系。
2 接口
ioc容器的最基础的功能规范由BeanFactory接口所定义,他规定了容器要做的最基本的事情,比如getBean方法。还有一个常用的是ApplicationContext,他在BeanFactory的基础上提供了更丰富的方法:
支持不同的信息源,支持国际化的实现
访问资源,体现在对ResourceLoader和Resource的支持上,可以从不同的地方得到bean的定义资源。
支持应用事件,他继承了ApplicationEventPublisher,在上下文中引入了事件机制,这些事件可以和bean的生命周期结合起来,为bean的管理提供便利
由于他的功能较为丰富,一般在做应用开发时,以ApplicationContext作为ioc的基础是个明智的选择。
3 ioc容器的初始化
BeanDefinition的资源定位,由ResourceLoader通过统一的接口Resource来完成,为各种形式的资源定位提供统一接口。比如有的是通过文件系统来定位,有的是通过classpath来定位。
BeanDefinition的载入,即把资源文件中的信息,载入到容器的数据结构中。容器通过这个bean的抽象来管理bean。
注册BeanDefinition,容器通过一个hashmap来维护已注册的bean定义。
在refresh方法里面包含了bean的初始化过程的模板。一般来说,在ioc的初始化过程,并不包含bean的依赖注入。
4 依赖注入
一般来说,在用户调用getBean方法的时候,才会触发依赖注入。首先会创建这个bean的时候,可能会采用反射或者cglib的机制来实例化bean。当前bean创建好之后,在通过BeanDefinition的信息,递归的调用getBean实例化他的依赖bean,并注入,最终完成当前bean的完整创建。
5?扩展点
FactoryBean是一种工厂bean,这种bean本身是一个工厂,可以生产出其他bean。通过这种特性,可以为应用生成一些特殊的bean,例如ProxyFactoryBean。他提供了一个很好的封装机制,可以封装proxy,rmi,jndi等
BeanPostProcessor bean后处理器,可以允许bean监听一些容器事件,在事件发生时触发一些后续的操作。可以是一些前置的、或者扫尾的工作。
6 AOP
aop实现的一个关键角色就是ProxyFactoryBean,他结合工厂bean的特点,为委托生成了aop代理对象。
待续。。
参考http://hill007299.iteye.com/blog/1563554
?
?
?