Spring源码跟读 01 IOC的思想设计
IOC 模式理解:
很多应用都是有多个类彼此调用合作来实现的,这样的话一个类里面就会需要用到另一个合作类的引用,如果
我们直接在类中进行 合作类对象的创建 那么就会加大这2个类之间的耦合度,导致代码后期难以维护和测试。
我们平常所构建对象 无非都是 封装了数据 和 提供了对数据的处理 而多个对象之间的方法调用和每个对象获取
成本类以外的对象中的数据这2方面 就形成了对象的依赖关系,这个依赖关系的管理在Spring中是通过IOC来完
的,有了IOC的存在 那么当一个对象需要另一个对象的引用时 可以取IOC中寻求,至于IOC中对对象的创建管
理和销毁我们不用关心,这样就减轻了2个类之间的耦合关系!而从具体对象手中将依赖的控制权转嫁给IOC容器
的模式就叫依赖控制反转!
IOC可以在对象生成或初始化时直接将对象的引用注入到对象数据域中的方式来 注入对方法调用的依赖!
这样IOC不仅管理了对象之间相互调用的依赖关系,还将依赖对象进行了注入 把应用从复杂的对象依赖关系
管理中解放了出来。
要了解以上IOC所能带来的便利 我们就需要进行下面的阅读了!
IOC的设计:
上图时IOC的接口设计图
BeanFactory 和 ApplicationContext 两个为主要接口
BeanFactory是IoC容器的基本规范 。
ApplicationContext则在BeanFactory基础上增加了高级特性。
一、从接口BeanFactory到HierarchicalBeanFactory再到ConfigurableBeanFactory是一条设计线。
1.BeanFactory定义了IoC容器的最基础规范,包含了getBean(),containBean(),getType(),getAlias()等IoC容器
的基本方法。
2.HierarchicalBeanFactory在继承了BeanFactory之后,添加了getParentBeanFactory方法,使BeanFactory
具备了父容器管理功能,拥有了父子结构。
3.ConfigurableBeanFactory主要定义了一些BeanFactory的配置功能,例如setParentBeanFactory()设置父容器,addBeanPostProcessor()配置Bean后置处理器,registerCustomEditor()配置自定义属性编辑器等。
二、以ApplicationContext应用上下文为核心的接口设计。从BeanFacotry到ListableBeanFactory再到ApplicationContext,再到ConfigurableApplicationContext第二条设计线。
我们常用的应用上下文实例ClassPathXmlApplicationContext,FileSystemXmlApplicationContext等都是ConfigurableApplicationContext的实现类。
1.ListabelBeanFactory接口中细化了BeanFactory的许多功能,例如:getBeanDefinitionNames获取工厂中定义的所有bean名称getBeanDefinitionCount(),findAnnotationOnBean(),containsBeanDefinition()等Bean解析方面的功能。
2.ApplicationContext通过继承ApplicationEventPublisher拥有了发布应用上下文事件的能力,继承MessaegeSource拥有了处理国际化信息的能力,继承ResourceLoader可以以多种方式处理资源文件。
三、BeanFactory到AutowireCapableBeanFactory再到ConfigurableListableBeanFactory接口第三条设计线。1.AutowireCapableBeanFactory这个接口很少在程序代码中使用,它的功能主要是为了装配applicationContext管理
之外的Bean。整合其他框架是这个接口的优势所在,它可以连接和填充那些生命周期不被Spring管理的已存在的
bean 实例。通过ApplicationContext的getAutowireCapableBeanFactory方法就很容易访问此接口。
2.ConfigurableListableBeanFactory同时继承了3个接口,ListableBeanFactory、AutowireCapableBeanFactory 和 ConfigurableBeanFactory,扩展之后,加上自有的这8个方法,这个工厂接口总共有83个方法,提供bean definition的解析,
注册功能。