Spring技術內幕學習筆記

一、 Spring的設計理念和整體架構

1.Spring的設計目標

簡單來說,Spring爲開發者提供的是一個一站式的輕量級應用開發框架。作爲平臺,Spring抽象了開發中遇到的共性問題。同時作爲輕量級的框架,Spring有一些特點:支持POJO和使用JavaBean的開發方式,使應用面向接口開發,充分支持OO的設計方法。

依據對傳統操作系統的認知方法,在設計上把Spring劃分爲核心、組件和應用3個基本的層次。可以把IOC容器和AOP模塊看做Spring的Kernel,是平臺實現的核心部分。Spring爲用用開發提供了許多即開即用的組件和服務,這些服務涵蓋了Java EE各個基本服務,對於其他的服務,也可以動態的擴展到Spring體系中。Spring通過社區和自己的努力,提供了這些看起來不起眼,卻對推廣起着關鍵作用的部分,從而構建出一個豐富的生態系統。

2.Spring的整體架構

2.Spring的應用場景

Spring的最終目標是簡化應用開發的編程模型。它所提供的服務,可以貫穿應用到整個軟件中。從最上層的Web UI到底層的數據操作,到其他企業信息數據的集成,再到各種J2EE服務的使用。一方面,我們可以把Spring作爲一個整體來使用,另一方面,也可以各取所需,把Spring的各個模塊拿出來單獨使用。


二、 IoC容器的實現

1.IoC容器概述

1.1IoC模式

    如果合作對象的引用或依賴關係的管理由具體對象來完成,會導致代碼的高度耦合和可測試性的降低,這對複雜的面向對象系統的設計是非常不利的。

    通過使用IoC容器,對象依賴關係的管理被反轉了,轉到IoC容器中來了,對象之間的相互依賴關係由IoC容器進行管理,並由IoC容器完成對象的注入。應用控制反轉後,當對象被創建時,由一個調控系統內的所有對象的外界實體將其所依賴的對象的引用傳遞給它,即依賴被注入到對象中。所以控制反轉是關於一個對象如何獲取它所依賴的對象的引用,在這裏,反轉指的是責任的反轉。

    簡單地說,因爲很多對象依賴關係的建立和維護並不需要和系統運行狀態有很強的關聯性,所以可以把在面向對象編程中需要執行的諸如新建對象,對對象引用賦值等操作交給容器統一完成。這樣一來,這些散落在不同代碼中的功能相同的部分就集中成爲容器的一部分,也就是成爲面向對象系統的基礎設施的一部分。

    如果對面向對象系統中的對象進行簡單分類,會發現除了一部分是數據對象外,其他很大一部分對象是用來處理數據的。這些對象並不常發生變化,是系統中基礎的部分。在很多情況下,這些對象在系統中以單間的形式起作用就可以滿足應用的需求。而且他們也不常涉及數據和狀態共享的問題。同時,這些對象之間的相互依賴關係也是比較穩定的,這些特性使這些對象非常適合由IoC容器來管理。雖然他們存在於應用系統中,但是應用系統並不承擔管理這些對象的責任,而是通過依賴反轉把責任交給了容器。

1.2IoC的應用場景

    在Spring中。Spring IoC容器提供了一個基本的JavaBean容器,通過IoC模式管理依賴關係,並通過依賴注入和AOP切面增強了爲JavaBean這樣的POJO對象賦予事務管理、生命週期管理等基本功能,相比於EJB組件,降低了應用開發對傳統J2EE技術規範的依賴。

    同時,如果使用IoC容器,吧資源獲取的方向反轉,讓IoC容器主動管理這些依賴關係,將這些依賴關係注入到組件中,那麼會讓這些依賴關係的適配和管理更加靈活。

    另一方面,在反轉的實現中,如果能通過刻度的文本來完成配置,並且還能通過工具對這些配置信息進行可視化的管理和瀏覽,MAME肯定是能夠提高對組件關係的管理水平。這符合開閉準則,並提高了組件系統設計的靈活性。

2.IoC容器系列的設計和實現

2.1設計

2.2 BeanFactory

    BeanFactory接口定義了IoC容器最基本的形式,並且提供了IoC容器所應遵守的最基本的服務契約,同時,這也是我們使用IoC容器所應遵守的最底層和最基本的編程規範。

Spring還提供了符合這個IoC容器的實現。



XmlBeanFactory繼承自DefaultListableBeanFactory這個類。後者是作爲一個默認的功能完整的IoC容器,是在很多地方都會用到的容器系列中的一個基本產品。


參考XmlBeanFactory的實現,我們以編程的方式使用DefaultListableBeanFactory,這對我們瞭解IoC的工作原理是非常有幫助的。


2.3 ApplicationContext

ApplicationContext在BeanFactory的基礎上添加了許多附加功能:

支持不同的信息源(MessageSource)

訪問多個資源(DefaultResourceLoader)

支持應用事件(ApplicationEventPublisher)

面向框架的使用風格(一些附加方法)




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章