Spring核心:IoC容器的实现

依赖控制反转的实现有很多种方式。在Spring中,IoC容器是实现这个模式的载体, 它可以在对象生成或初始化时直接将数据注入到对象中,也可以通过将对象引用注入到对象数据域中的方式来注入对方法调用的依赖。这种依赖注入是可以递归的,对象被逐层注入。就此而言,这种方案有一种完整而简洁的美感,它把对象的依赖关系有序地建立起来,简化了对象依赖关系的管理,在很大程度上简化了面向对象系统的复杂性。


loC容器系列的设计与实现: BeanFactory和ApplicationContext

在Spring IoC容 器的 设计中, 我们 可以 看到两个主要的容器系列 , 一个是实现BeanFactory接口的简单容器系列,这 系列容器只 实现了容器的最基本功能; 另一个是ApplicationContext应用上下文,它作 为容器的高级形态而存在。应用上下文在简单容器的基础上,增加了许多面向框架的特性,同时对应用环境作了许多适配。有了这两种基本的容器系列, 基本上可以满足用户对IoC容器使用的大部分需求了。

Spring的loC 容器系列

loC容器为开发者管理对象之间的依赖关系提供了很多便利和基础服务。有许多IoC容器供开发者选择,SpringFramework的IoC核心就是其中一个,它是开源的。那具体什么是IoC容器呢? 它在Spring框架中到底长什么样?其实对IoC容器的使用者来说,我 们经常接触到的BeanFactory和ApplicationContext都可以看成是容器的具体表现形式。如果深入到Spring的实现中去看,我们通常所说的IoC容器, 实际上代表着一系列功能各异的容器产品,只是容器的功能有大有小 ,有各自的特点。这在Spring中也是一样,Spring有各式各样的
IoC容器的实现供用户选择和使用。使用什么样的容器完全取决于用户的需要, 但在使用之前如果能够了解容器的基本情况,那对容器的使用是非常有帮助的。从代码的角度入手,我可以看到关于这一系列容器的设计情况。


就像商品需要有产品规格说明一样,同样,作 为IoC容器,也需要为它的具体实现指定基本的功能规范,这个功能规范的设计表现为接口类BeanFactory, 它体现了Spring为提供给用户使用的IoC容器所设定的最基本的功能规范。对Spring的具体IoC容器实现来说, 它需要满足的基本特性是什么呢?它需要满足BeanFactory这个基本的接口定义,所以在图中可以看到这个BeanFactory接口在继承体系中的地位, 它是作为一个最基本的接口类出现在Spring的IoC容器体系中的。
在这些S pri ng提供的基本loC容器的 接口定义和实现的基础上,Spring通过定义BeanDefinition来管理基千Spring的应用中的各种对象以及它们之间的相互依赖关系。BeanDefinition抽象了我们对Bean的定义,是让容器起作用的主要数据类型。我们都知道, 在计算机世界里,所有的功能都是建立在通过数据对现实进行抽象的基础上的。IoC容器是用来管理对象依赖关系的,对IoC容器来说, BeanDefinition就是对依赖反转模式中管理的对象依赖关系的数据抽象,也是容器实现依赖反转功能的核心数据结构,依赖反转功能都是围绕对这个BeanDefinition的处理来完成的。这些BeanDefinition就像是容器里装的 水,有了这些基本数据,容器才能够发挥作用。在下面的分析中,BeanDefinition的出现次数会很多。
同时,在使用IoC容器时,了解 BeanFactory和ApplicationContext之间的区别对我们理解和使用IoC容器也是比较重要的。弄清楚这两种重要容器之间的区别和联系,意味若我们具备了辨别容器系列中不同 容器产品的能力。还有一个好处就是,如果需要定制特定功能的容器实现,也能比 较方便 地在容器系列中找到一款恰当的产品作为参考,不需要重新设计。

猜你喜欢

转载自blog.csdn.net/qq_18150351/article/details/80059873