共计 1674 个字符,预计需要花费 5 分钟才能阅读完成。
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 接口来裁减性能。