主要的设计思想

关于Spring设计的主要设计思想,其实Rod Johnson在他的那本《Expert One on One – J2EE Development without EJB》中有详细的解释。这里做下概括,Spring出现的主要原因是为了提供一个轻量级的容器,这个容器除了提供容器的基本服务以外,还应该具备以下的特点:

  • 容器应该能够管理在其中的应用程序代码,但是不应该将容器侵入到应用程序的代码之中。也就是说,应用程序的代码应该是独立于容器的
  • 容器应该能够快速启动
  • 在容器中部署一个对象应该不需要任何特殊的部署步骤
  • 容器应该依赖于最少的API以能够在不同的环境下运行
  • ……..

而IoC正是为了解决以上的第一个特点的,在IoC中,组件不需要去查找它所依赖的对象,而是由容器来负责将组件所依赖的对象通过JavaBean Properties(Setter方法)或者构造函数来注入给组件。

主要类及其职责

Spring IoC Class Diagram
这个类图相对来说比较简单些,主要包括了继承BeanFactory接口的各个接口及其实现,主要目的是为了摸清BeanFactory这一条线里面各个类之间的关系。整个类的继承体系相对比较简单,其中有几个类/接口的作用需要重点把握:

  • BeanFactory:这个接口的作用是定义了访问Bean容器所需的基本方法,是整个Spring Bean容器的底层接口
  • AbstractBeanFactory:这个类的作用从名字上就可以看出,使BeanFactory的一个抽象实现,提供了诸如getBean等方法的默认实现
  • SingletonBeanRegistry:这个接口的主要作用对单例Bean进行管理。
  • 其他的一些类/接口基本上是对BeanFactory接口进行了扩展,主要的功能可以看类/接口的名字或者注释来了解

感想

从Spring的类图中可以看出,Spring的类的命名的非常好,基本上让人一下就看出了这个类的职责所在,并且这个职责基本上是单一的,不会有一个类去做多件事情。Spring对BeanFactory的扩展接口也是只加了一种特性,然后通过实现多个接口以实现多个特性,这样的设计使接口的实现方可以方便的根据需求挑选接口来实现,而不用担心实现过多的功能。