Spring作為現(xiàn)在最優(yōu)秀的框架之一,已被廣泛的使用,51CTO也曾經(jīng)針對Spring框架中的JDBC應用做過報道。本文將從另外一個視角試圖剖析出Spring框架的作者設計Spring框架的骨骼架構的設計理念,有那幾個核心組件?為什么需要這些組件?它們又是如何結合在一起構成Spring的骨骼架構?Spring的AOP特性又是如何利用這些基礎的骨骼架構來工作的?Spring中又使用了那些設計模式來完成它的這種設計的?它的這種 設計理念對對我們以后的軟件設計有何啟示?本文將詳細解答這些問題。
Spring的骨骼架構
Spring總共有十幾個組件,但是真正核心的組件只有幾個,下面是Spring框架的總體架構圖:

圖1.Spring框架的總體架構圖
從上圖中可以看出Spring框架中的核心組件只有三個:Core、Context和Beans。它們構建起了整個Spring的骨骼架構。沒有它們就不可能有AOP、Web等上層的特性功能。下面也將主要從這三個組件入手分析Spring。
Spring的設計理念
前面介紹了Spring的三個核心組件,如果再在它們三個中選出核心的話,那就非Beans組件莫屬了,為何這樣說,其實Spring就是面向Bean的編程(BOP,Bean Oriented Programming),Bean在Spring 中才是真正的主角。
Bean在Spring中作用就像Object對OOP的意義一樣,沒有對象的概念就像沒有面向對象編程,Spring中沒有Bean也就沒有Spring存在的意義。就像一次演出舞臺都準備好了但是卻沒有演員一樣。為什 么要Bean這種角色Bean或者為何在Spring如此重要,這由Spring框架的設計目標決定,Spring為何如此流行,我們用Spring的原因是什么,想想你會發(fā)現(xiàn)原來Spring解決了一個非常關鍵的問題他可以讓 你把對象之間的依賴關系轉而用配置文件來管理,也就是他的依賴注入機制。而這個注入關系在一個叫Ioc容器中管理,那Ioc容器中有又是什么就是被Bean包裹的對象。Spring正是通過把對象包裝在 Bean中而達到對這些對象管理以及一些列額外操作的目的。
它這種設計策略完全類似于Java實現(xiàn)OOP的設計理念,當然了Java本身的設計要比Spring復雜太多太多,但是都是構建一個數(shù)據(jù)結構,然后根據(jù)這個數(shù)據(jù)結構設計他的生存環(huán)境,并讓它在這個環(huán)境中 按照一定的規(guī)律在不停的運動,在它們的不停運動中設計一系列與環(huán)境或者與其他個體完成信息交換。這樣想來回過頭想想我們用到的其他框架都是大慨類似的設計理念。
核心組件如何協(xié)同工作
前面說Bean是Spring中關鍵因素,那Context和Core又有何作用呢?前面吧Bean比作一場演出中的演員的話,那Context就是這場演出的舞臺背景,而Core應該就是演出的道具了。只有他們在一起才能 具備能演出一場好戲的最基本的條件。當然有最基本的條件還不能使這場演出脫穎而出,還要他表演的節(jié)目足夠的精彩,這些節(jié)目就是Spring能提供的特色功能了。
我們知道Bean包裝的是Object,而Object必然有數(shù)據(jù),如何給這些數(shù)據(jù)提供生存環(huán)境就是Context要解決的問題,對Context來說他就是要發(fā)現(xiàn)每個Bean之間的關系,為它們建立這種關系并且要維護好 這種關系。所以Context就是一個Bean關系的集合,這個關系集合又叫Ioc容器,一旦建立起這個Ioc容器后Spring就可以為你工作了。那Core組件又有什么用武之地呢?其實Core就是發(fā)現(xiàn)、建立和維護每 個Bean之間的關系所需要的一些列的工具,從這個角度看來,Core這個組件叫Util更能讓你理解。
它們之間可以用下圖來表示:

圖2.三個組件關系
核心組件詳解
這里將詳細介紹每個組件內部類的層次關系,以及它們在運行時的時序順序。我們在使用Spring是應該注意的地方。
Bean組件
前面已經(jīng)說明了Bean組件對Spring的重要性,下面看看Bean這個組件式怎么設計的。Bean組件在Spring的org.springframework.beans包下。這個包下的所有類主要解決了三件事:Bean的定義、Bean 的創(chuàng)建以及對Bean的解析。對Spring的使用者來說唯一需要關心的就是Bean的創(chuàng)建,其他兩個由Spring在內部幫你完成了,對你來說是透明的。
SpringBean的創(chuàng)建時典型的工廠模式,他的頂級接口是BeanFactory,下圖是這個工廠的繼承層次關系: