Spring包含許多功能和特性,并被很好地組織在下圖所示的七個(gè)模塊中。本節(jié)將依次介紹每個(gè)模塊.
Core
包是框架的最基礎(chǔ)部分, 并提供依賴注入(Dependency Injection)特性來(lái)使你可管理Bean容器功能。 這里的基礎(chǔ)概念是BeanFactory,它提供Factory模式來(lái)消除對(duì)程序性單例的需要, 并允許你從程序邏輯中分離出依賴關(guān)系的配置和描述。
構(gòu)建于Beans包上Context包,提供了一種框架式的Bean訪問(wèn)方式, 有些象JNDI注冊(cè)。Context包的特性得自Beans包,并添加了文本消息的發(fā)送,通過(guò)比如資源串, 事件傳播,資源裝載的方式和Context的透明創(chuàng)建,如通過(guò)Servlet容器。
DAO包
提供了JDBC的抽象層,它可消除冗長(zhǎng)的JDBC編碼和解析數(shù)據(jù)庫(kù)廠商特有的錯(cuò)誤代碼。 該包也提供了一種方法實(shí)現(xiàn)編程性和聲明性事務(wù)管理,不僅僅是針對(duì)實(shí)現(xiàn)特定接口的類, 而且對(duì)所有的POJO。
ORM包
為流行的關(guān)系-對(duì)象映射APIs提供了集成層,包括JDO,Hibernate和iBatis。 通過(guò)ORM包,你可與所有Spring提供的其他特性相結(jié)合來(lái)使用這些對(duì)象/關(guān)系映射, 如前邊提到的簡(jiǎn)單聲明性事務(wù)管理。
Spring的AOP包提供與AOP聯(lián)盟兼容的面向方面編程實(shí)現(xiàn),允許你定義, 如方法攔截器和切點(diǎn),來(lái)干凈地給從邏輯上說(shuō)應(yīng)該被分離的功能實(shí)現(xiàn)代碼解耦。 使用源碼級(jí)的元數(shù)據(jù)功能,你可將各種行為信息合并到你的代碼中,有點(diǎn)象.Net的attribute。
Spring的Web包提供了基本的面向Web的綜合特性,如Multipart功能, 使用Servlet監(jiān)聽器的Context的初始化和面向Web的Applicatin Context。 當(dāng)與WebWork或Struts一起使用Spring時(shí),這個(gè)包使Spring可與其他框架結(jié)合。
Spring的Web MVC包提供了面向Web應(yīng)用的Model-View-Controller實(shí)現(xiàn)。 Spring的MVC實(shí)現(xiàn)不僅僅是一種實(shí)現(xiàn),它提供了一種domain model代碼和web form的清晰分離, 這使你可使用Spring框架的所有其他特性,如校驗(yàn).
利用積木方式來(lái)描述你在各種場(chǎng)合使用Spring的情況, 從Applet一直到完整的使用Spring的事務(wù)管理功能和Web框架的企業(yè)應(yīng)用。
一個(gè)典型的使用大部分Spring特性的Web應(yīng)用。使用TransactionProxyFactoryBeans, Web應(yīng)用是完全事務(wù)性的,就像使用EJB提供的那種容器管理的事務(wù)一樣. 所有的你的自定義業(yè)務(wù)邏輯可以通過(guò)簡(jiǎn)單的POJO來(lái)實(shí)現(xiàn),并通過(guò)Spring的Dependency Injection容器進(jìn)行管理。其他的服務(wù),如發(fā)送email和校驗(yàn),獨(dú)立于Web層, 使你能夠決定在哪里執(zhí)行校驗(yàn)規(guī)則。 Spring的ORM支持包含了Hibernate,JDO和iBatis。如使用HibernateDaoSupport, 你可復(fù)用已經(jīng)存在的Hibernate映射。從Controller無(wú)縫整合web層和領(lǐng)域模型, 消除對(duì)ActionForms的需要和其他轉(zhuǎn)換HTTP參數(shù)為領(lǐng)域模型的類。
有時(shí),現(xiàn)有情況不允許你徹底地轉(zhuǎn)換到一種不同的框架。Spring沒(méi)有 強(qiáng)迫你使用它的全部,它不是一種全有全無(wú) 的解決方案。現(xiàn)有的使用WebWork,Struts,Tapestry或其他的UI框架的前端程序可極佳的 與基于Spring的中間層進(jìn)行集成,使你可使用Spring提供的事務(wù)處理特性。 你唯一要做的事是使用ApplicationContext來(lái)掛接你的業(yè)務(wù)邏輯和 通過(guò)WebApplicationContext來(lái)集成你的Struts前端程序。
當(dāng)你需要通過(guò)WebService來(lái)訪問(wèn)你的現(xiàn)有代碼時(shí), 你可使用Spring的Hessian-,Burlap-, Rmi- 或者 JaxRpcProxyFactory類。 使得突然給現(xiàn)有應(yīng)用增加遠(yuǎn)程訪問(wèn)時(shí)不再那么困難。
Spring也為EJB提供了訪問(wèn)層和抽象層, 使你可復(fù)用已存在的POJO并將他們包裝在Stateless SessionBean中, 以便在可能需要聲明式安全(EJB中的安全管理,譯者注)的可升級(jí)的可容錯(cuò)的Web應(yīng)用中使用。