一、SpringIOC容器设计原理

1. Spring Ioc容器系列

对于Ioc容器的使用者来说,我们经常接触到的BeanFactory和ApplicationContext都可以看成是容器的具体表现形式。如果深入到Spring的实现中去看,所说的Ioc容器,实际上代表着一系列功能各异的容器产品,只是容器的功能有大有小,各有特点。Spring通过定义BeanDefinition来管理基于Spring的应用中的各种对象以及他们之间的相互依赖关系。对Ioc容器而言,BeanDefinition就是依赖反转模式中管理的对象依赖关系的数据抽象。容器核心数据结构的依赖反转功能都是围绕这个BeanDefinition的处理来完成。

2. Spring Ioc容器的设计

Ioc容器的接口设计图如下:

从接口BeanFactory到HierarchicalBeanFactory,再到ConfigurableBeanFactory,是一条主要的BeanFactory设计路径。BeanFactory定义了基本的Ioc容器的规范。包括了getBean()方法。HierarchicalBeanFactory接口在继承了BeanFactory后,增加了getParentBeanFactory(),使BeanFactory具备了双亲Ioc容器的管理功能。在接下来的ConfigurableBeanFactory中,定义了一些对BeanFactory的配置功能,比如通过setParentBeanFactory()设置双亲Ioc容器,通过addBeanPostProcessor()配置Bean后置处理器等等。

第二条接口设计主线是,以ApplicationContext为核心的接口设计我们常用的应用上下文基本上都是ConfigurableApplicationContext或者WebApplicationContext的实现。在这个接口体系中,ListableBeanFactory和HierarchicalBeanFactory两个接口,连接BeanFactory接口定义和ApplicationContext应用上下文的接口定义。在ListableBeanFactroy接口中,细化了许多BeanFactory的接口功能,比如定义了getBeanDefinitionNames()接口方法;对于HierarchiaclBeanFactory接口,我们在前文已经提到过;对于ApplicationContext接口,它通过继承MessageSource、ResourceLoader、ApplicationEventPublisher接口,在BeanFactory简单Ioc容器的基础上添加了许多对高级容器的特性的支持。

这里主要涉及接口关系,而具体的Ioc容器都是在这个接口体系下实现的,比如DefaultListableBeanFactory,这个基本Ioc容器的实现就是实现了ConfigurableBeanFactory,从而成为一个简单Ioc容器的实现。像其他Ioc容器,比如XmlBeanfactory,都是在DefaultListableBeanFactory的基础上做扩展。

SpringIoc接口系统是以BeanFactory和ApplicationContext为核心,而BeanFactory是Ioc容器的最基本接口,在ApplicationContext的设计中,一方面,可以看到它继承了BeanFactory接口体系的接口,具备了BeanFactory Ioc容器的基本功能。另一方面,通过继承MessageSource、ResourceLoader、ApplicationEventPublisher这些接口,Beanfactory为ApplicationContext赋予了更高级的Ioc容器特性。

对ApplicationContext而言,为了在Web环境中使用它,还设计了WebApplicationContext接口,而这个接口通过继承ThemeSource接口来扩充功能。

你可能感兴趣的:(javaspring)