《Spring技術內幕:深入解析Spring架構與設計原理》筆記之一(Spring基本概述)

    一直不懂Spring的兩大塊內容:IOC和AOP。

    現在,找來這個《Spring技術內幕:深入解析Spring架構與設計原理》pdf好好拜讀學習一下。    

    Spring的主要projects:

    Spring IO platform

    spring boot

    spring framework:spring項目的核心,包括依賴注入、事務、驗證、數據綁定和AOP

    spring cloud data flow

    spring cloud

    spring data:該項目爲Spring應用提供使用非關係型數據的能力,比如,當基礎數據並非存儲在關係數據庫中時,又如Map-Reduce中的分佈式存儲、雲計算存儲環境中等。Spring應用可以考慮使用Spring Data來操作這種類型的數據。

    spring integration:體現了“企業集成模式”的具體實現,併爲企業的數據集成提供解決方案。Spring Integration爲企業數據集成提供了各種適配器,通過這些適配器來轉換各種消息格式,並幫助Spring應用完成與企業應用系統的集成。

    spring batch:提供構建批處理應用和自動化操作的框架,這些應用的特點是不需要與用戶交互,重複的操作量大。對於大容量的批量數據處理而言,這些操作往往要求較高的可靠性。

    spring security:廣泛使用的基於Spring的認證和安全工具,爲Spring應用提供一個安全服務,比如用戶認證、授權等。

    spring Hateoas

    spring  rest docs

    spring social:是spring框架的擴展,可以幫助Spring應用更方便地使用SNS(Social Network Service),例如FaceBook和Twitter這些服務的使用等。

    spring amqp:是爲Spring應用更好地使用基於AMQP(高級消息隊列協議)的消息服務開發的,使在Spring應用中使用AMQP消息服務器變得更爲簡單。這個項目支持Java和.NET兩個版本。SpringSource旗下的Rabbit MQ就是一個開源的基於AMQP的消息服務器,Rabbit MQ是用Erlang語言開發出來的。

    spring mobile:Spring mobile和Spring Android不同,它能使工作在Spring傳統的服務端完成。它是基於Spring MVC構建的,爲移動終端的服務器應用開發提供支持,比如,使用Spring Mobile可以在服務器端自動識別連接到服務器的移動終端的相關設備信息,從而爲特定的移動終端實現應用定製。

    spring for android:爲android終端開發應用提供Spring的支持,它提供一個在Android應用環境中工作,基於Java的REST客戶端。

    spring web flow:建立在spring MVC基礎上的web工作流引擎。Spring Web Flow定義了一種特定的語言來描述工作流,同時高級的工作流控制器引擎可以管理會話狀態,支持Ajax來構建豐富的客戶端體驗,並且提供對JSF的支持。

    spring web service

    spring ldap

    spring session

    spring shell

    spring flo

    spring kafka

    spring statemachine

Spring的主要架構:


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

  • Spring IOC:

       包含了最基本的IOC容器BeanFactory的接口和實現,也就是說,在這個Spring的核心包內,不僅定義了IOC容器的最基本的接口(BeanFactory),也提供了一系列這個接口的實現,如XMLBeanFactory就是一個最基本的BeanFactory(IOC容器),從名字上可以看到,它能夠支持通過XML文件配置的Bean定義信息。除此之外,Spring IOC容器還提供了一個容器系列,如SimpleJndiBeanFactoy、StaticListableBeanFactory等。在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集成到Spring中的。在這個模塊中,Spring AOP實現一個完整的建立AOP代理對象,實現AOP攔截器,直至實現各種Advice通知的過程。在這個模塊的分析中可以看到,AOP模塊的完整實現是我們熟悉AOP實現技術的一個不可多得的樣本。

  • Spring MVC:

        對於大多數企業應用而言,Web應用已經是一種普遍的軟件發佈方式,而在web應用的設計中,MVC模式已被廣發使用了。在Java社區中也有很多類似的MVC框架可以選擇,而其這些框架往往和web ui設計整合在一起,對於定位於提供整體平臺解決方案Spring,這樣的整合也是不可缺少的。Spring MVC就是這樣一個模塊,這個模塊以DiapatcherServlet爲核心,實現了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還提供了許多模板對象,如HibernateTemplate這一的工具來實現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的封裝,爲應用屏蔽了各種通信和調用細節的實現,同時,通過這一層的封裝,使應用可以通過選擇各種不同的遠端調用來實現,比如,可以使用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應用得越來越廣泛。




發佈了40 篇原創文章 · 獲贊 59 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章