- Spring技術內幕:深入解析Spring架構與設計原理(第2版)
- 計文柯
- 2455字
- 2018-12-31 19:55:30
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應用得越來越廣泛。
- Cocos2d Cross-Platform Game Development Cookbook(Second Edition)
- Java范例大全
- Moodle Administration Essentials
- Android開發精要
- arc42 by Example
- Vue.js入門與商城開發實戰
- 三維圖形化C++趣味編程
- 網頁設計與制作教程(HTML+CSS+JavaScript)(第2版)
- JS全書:JavaScript Web前端開發指南
- QGIS:Becoming a GIS Power User
- jQuery炫酷應用實例集錦
- Machine Learning in Java
- Natural Language Processing with Python Quick Start Guide
- AutoCAD基礎教程
- Spring Boot從入門到實戰