官术网_书友最值得收藏!

1.3 Spring的整體架構

了解了Spring的設計理念之后,我們繼續介紹Spring的整體架構。在Spring中,我們大致按照一個參考關系,將其劃分為幾個層次,比如IoC容器、AOP核心模塊、封裝的Java EE服務、作為中間的驅動組件、其他作為上層的應用,這些應用不但包括來源于社區的應用封裝,如ACEGI,也包括使用Spring作為平臺開發出來的各種類型的企業應用。

從技術上看,Spring是封裝得很清晰的一個分層架構,可以參考如圖1-4所示的Spring架構圖。

圖1-4 Spring架構圖

在這個架構圖中,我們可以看到以下的Spring基本組成模塊。

? Spring IoC:包含了最為基本的IoC容器BeanFactory的接口與實現,也就是說,在這個Spring的核心包中,不僅定義了IoC容器的最基本接口(BeanFactory),也提供了一系列這個接口的實現,如XmlBeanFactory就是一個最基本的BeanFactory(IoC容器),從名字上可以看到,它能夠支持通過XML文件配置的Bean定義信息。除此之外,Spring IoC容器還提供了一個容器系列,如SimpleJndiBeanFactory、StaticListableBeanFactory等。我們知道,單純一個IoC容器對于應用開發來說是不夠的,為了讓應用更方便地使用IoC容器,還需要在IoC容器的外圍提供其他的支持,這些支持包括Resource訪問資源的抽象和定位等,所有的這些,都是這個Spring IoC模塊的基本內容。另外,在BeanFactory接口實現中,除了前面介紹的像BeanFactory那樣最為基本的容器形態之外,Spring還設計了IoC容器的高級形態ApplicationContext應用上下文供用戶使用,這些ApplicationContext應用上下文,如FileSystemXmlApplicationContext、ClassPathXmlApplicationContext,對應用來說,是IoC容器中更面向框架的使用方式,同樣,為了便于應用開發,像國際化的消息源和應用支持事件這些特性,也都在這個模塊中配合IoC容器來實現,這些功能圍繞著IoC基本容器和應用上下文的實現,構成了整個Spring IoC模塊設計的主要內容。

? Spring AOP:這也是Spring的核心模塊,圍繞著AOP的增強功能,Spring集成了AspectJ作為AOP的一個特定實現,同時還在JVM動態代理/CGLIB的基礎上,實現了一個AOP框架,作為Spring集成其他模塊的工具,比如TransactionProxyFactoryBean聲明式事務處理,就是通過AOP集成到Spring中的。在這個模塊中,Spring AOP實現了一個完整的建立AOP代理對象,實現AOP攔截器,直至實現各種Advice通知的過程。在對這個模塊的分析中可以看到,AOP模塊的完整實現是我們熟悉AOP實現技術的一個不可多得的樣本。

? Spring MVC:對于大多數企業應用而言,Web應用已經是一種普遍的軟件發布方式,而在Web應用的設計中,MVC模式已經被廣泛使用了。在Java的社區中,也有很多類似的MVC框架可以選擇,而且這些框架往往和Web UI設計整合在一起,對于定位于提供整體平臺解決方案的Spring,這樣的整合也是不可缺少的。Spring MVC就是這樣一個模塊,這個模塊以DispatcherServlet為核心,實現了MVC模式,包括怎樣與Web容器環境的集成,Web請求的攔截、分發、處理和ModelAndView數據的返回,以及如何集成各種UI視圖展現和數據表現,如PDF、Excel等,通過這個模塊,可以完成Web的前端設計。

? Spring JDBC/Spring ORM:在企業應用中,對以關系數據庫為基礎的數據的處理是企業應用的一個重要方面,而對于關系數據庫的處理,Java提供了JDBC來進行操作,但在實際的應用中,單純使用JDBC的方式還是有些繁瑣,所以在JDBC規范的基礎上,Spring對JDBC做了一層封裝,使通過JDBC完成的對數據庫的操作更加簡潔。Spring JDBC包提供了JdbcTemplate作為模板類,封裝了基本的數據庫操作方法,如數據的查詢、更新等;另外,SpringJDBC還提供了RDBMS的操作對象,這些操作對象可以使應用以更面向對象的方法來使用JDBC,比如可以使用MappingSqlQuery將數據庫數據記錄直接映射到對象集合,類似一個極為簡單的ORM工具。除了通過Spring JDBC對數據庫進行操作外,Spring還提供了許多對ORM工具的封裝,這些封裝包括了常用的ORM工具,如Hibernate、iBatis等,這一層封裝的作用是讓應用更方便地使用這些ORM工具,而不是替代這些ORM工具,比如可以把對這些工具的使用和Spring提供的聲明式事務處理結合起來。同時,Spring還提供了許多模板對象,如HibernateTemaplate這樣的工具來實現對Hibernate的驅動,這些模板對象往往包裝使用Hibernate的一些通用過程,比如Session的獲取和關閉、事務處理的關聯等,從而把一些通用的特性實現抽象到Spring中來,更充分地體現了Spring的平臺作用。

? Spring事務處理:Spring事務處理是一個通過Spring AOP實現自身功能增強的典型模塊。在這個模塊中,Spring把在企業應用開發中事務處理的主要過程抽象出來,并且簡潔地通過AOP的切面增強實現了聲明式事務處理的功能。這個聲明式事務處理的實現,使應用只需要在IoC容器中對事務屬性進行配置即可完成,同時,這些事務處理的基本過程和具體的事務處理器實現是無關的,也就是說,應用可以選擇不同的具體的事務處理機制,如JTA、JDBC、Hibernate等。因為使用了聲明式事務處理,這些具體的事務處理機制被納入Spring事務處理的統一框架中完成,并完成與具體業務代碼的解耦。在這個模塊中,可以看到一個通用的實現聲明式事務處理的基本過程,比如怎樣配置事務處理的攔截器,怎樣讀入事務配置屬性,并結合這些事務配置屬性對事務對象進行處理,包括事務的創建、掛起、提交、回滾等基本過程,還可以看到具體的事務處理器(如DataSourceTransactionManager、HibernateTransactionManager、JtaTransactionManager等)是怎樣封裝不同的事務處理機制(JDBC、Hibernate、JTA等)的。

? Spring遠端調用:Spring為應用帶來的一個好處就是能夠將應用解耦。應用解耦,一方面可以降低設計的復雜性,另一方面,可以在解耦以后將應用模塊分布式地部署,從而提高系統整體的性能。在后一種應用場景下,會用到Spring的遠端調用,這種遠端調用是通過Spring的封裝從Spring應用到Spring應用之間的端到端調用。在這個過程中,通過Spring的封裝,為應用屏蔽了各種通信和調用細節的實現,同時,通過這一層的封裝,使應用可以通過選擇各種不同的遠端調用來實現,比如可以使用HTTP調用器(以HTTP協議為基礎的),可以使用第三方的二進制通信實現Hessian/Burlap,甚至還封裝了傳統Java技術中的RMI調用。

? Spring應用:從嚴格意義上來說,這個模塊不屬于Spring的范圍。這部分的應用支持,往往來自一些使用得非常廣泛的Spring子項目,或者該子項目本身就可以看成是一個獨立的Spring應用,比如為Spring處理安全問題的Spring ACEGI后來轉化為Spring子項目的Spring Security OAuth等。這個Spring應用支持的部分還有一個重要的組成,那就是包括了其他的一些模塊,這些模塊提供了許多Spring應用與其他技術實現的相關接口,比如與各種J2EE實現規范的接口,對JMS、JNID、JMX、JavaMail等的支持,Spring應用和Flex前端的接口,Spring應用移植到OSGi平臺上運行的接口。通過這個模塊的支持,使Spring應用可以便利和簡潔地容納第三方的技術實現,不但豐富了Spring應用的功能,而且豐富了整個Spring生態圈,使Spring應用得越來越廣泛。

主站蜘蛛池模板: 玉溪市| 彰化市| 海南省| 法库县| 丰县| 株洲县| 商都县| 云和县| 玉山县| 阳信县| 和龙市| 莒南县| 永善县| 北流市| 龙井市| 修水县| 栾川县| 汾西县| 留坝县| 光山县| 甘肃省| 呈贡县| 五峰| 获嘉县| 遂平县| 舞阳县| 卢龙县| 蕉岭县| 沙洋县| 宜兰县| 东兰县| 象州县| 汽车| 阜城县| 正定县| 河源市| 广平县| 汉源县| 兴城市| 高雄市| 东乡|