術語:
ioc(inversion of control)控制反轉
invasive 入侵性
aop(aspect-oriented programming) 面向方面(切面)程式設計
dependency inversion依賴倒置
dependency injection 依賴注入
spring 框架是乙個分層架構,由 7 個定義良好的模組組成。spring 模組構建在核心容器之上,核心容器定義了建立、配置和管理 bean 的方式。組成 spring 框架的每個模組(或元件)都可以單獨存在,或者與其他乙個或多個模組聯合實現。
☆ (core)核心容器:核心容器提供 spring 框架的基本功能。核心容器的主要元件是 beanfactory,它是工廠模式的實現。beanfactory 使用控制反轉 (ioc) 模式將應用程式的配置和依賴性規範與實際的應用程式**分開。
☆(context) spring 上下文:spring 上下文是乙個配置檔案,向 spring 框架提供上下文資訊。spring 上下文包括企業服務,例如 jndi、ejb、電子郵件、國際化、校驗和排程功能。
☆ spring aop:通過配置管理特性,spring aop 模組直接將面向方面的程式設計功能整合到了 spring 框架中。所以,可以很容易地使 spring 框架管理的任何物件支援 aop。spring aop 模組為基於 spring 的應用程式中的物件提供了事務管理服務。通過使用 spring aop,不用依賴 ejb 元件,就可以將宣告性事務管理整合到應用程式中。
☆ spring dao:jdbc dao 抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不同資料庫**商丟擲的錯誤訊息。異常層次結構簡化了錯誤處理,並且極大地降低了需要編寫的異常**數量(例如開啟和關閉連線)。spring dao 的面向 jdbc 的異常遵從通用的 dao 異常層次結構。
☆ spring orm:spring 框架插入了若干個 orm 框架,從而提供了 orm 的物件關係工具,其中包括 jdo、hibernate 和 ibatis sql map。所有這些都遵從 spring 的通用事務和 dao 異常層次結構。
☆ spring web 模組:web 上下文模組建立在應用程式上下文模組之上,為基於 web 的應用程式提供了上下文。所以,spring 框架支援與 jakarta struts 的整合。web 模組還簡化了處理多部分請求以及將請求引數繫結到域物件的工作。
☆ spring mvc 框架:mvc 框架是乙個全功能的構建 web 應用程式的 mvc 實現。通過策略介面,mvc 框架變成為高度可配置的,mvc 容納了大量檢視技術,其中包括 jsp、velocity、tiles、itext 和 poi。
對spring容器概念的理解:
spring包含並管理應用物件的配置和生命週期,在這個意義上它是一種容器。spring的核心即是個ioc/di的容器,它可以幫程式設計人員完成元件(類別們)之間的依賴關係注入(鏈結),使得元件(類別們)之間的依賴達到最小,進而提高元件的重用性。
對ioc的理解:
ioc是spring的核心概念,ioc的抽象概念是「依賴關係的轉移」,像是「高層模組不應該依賴低層模組,而是模組都必須依賴於抽象」是ioc的一種表現,「實現必須依賴抽象,而不是抽象依賴實現」也是ioc的一種表現,「應用程式不應依賴於容器,而是容器服務於應用程式」也是ioc的一種表現。要了解ioc,最好先從dependency inversion開始了解,也就是依賴關係的反轉。簡單的說,在模組設計時,高層的抽象模組通常是與業務相關的模組,它應該具有重用性,而不依賴於低層的實現模組。ioc的control是控制的意思,其實其背後的意義也是一種依賴關係的轉移,如果a依賴於b,其意義即是b擁有控制權,我們要轉移這種關係,所以依賴關係的反轉即是控制關係的反轉,藉由控制關係的轉移,可以獲得元件的可重用性。
使用ioc,物件是被動的接受依賴類,而不是自己主動的去找。容器在例項化的時候主動將它的依賴類注入給它。可以這樣理解:控制反轉將類的主動權轉移到介面上,依賴注入通過xml配置檔案在類例項化時將其依賴類注入。
「控制反轉(inversion of control)與依賴倒置原則(dependency inversion principle)是乙個同義原則。雖然「依賴倒置」和「控制反轉」在設計層面上都是消解模組耦合的有效方法,也都是試圖令具體的、易變的模組依賴於抽象的、穩定的模組的基本原則,但二者在使用語境和關注點上存在差異:「依賴倒置」強調的是對於傳統的、源於面向過程設計思想的層次概念的「倒置」,而「控制反轉」強調的是對程式流程控制權的反轉。「依賴倒置」的使用範圍更為寬泛一些。
以程式的術語來說的話,就是「不要向容器要求您所需要的(物件)資源,容器會自動將這些物件給您!」。ioc要求的是容器不侵入應用程式本身,應用程式本身提供好介面,容器可以透過這些介面將所需的資源注至程式中,應用程式不向容器主動要求資源,故而不會依賴於容器的元件,應用程式本身不會意識到正被容器使用,可以隨時從容器中脫離轉移而不用作任何的修改,而這個特性正是一些業務邏輯中介軟體最需要的。
spring的低侵入性(invasive):
spring中的元件並不會意識到它正置身於spring中,這使得元件可以輕易的從框架中脫離,而幾乎不用任何的修改,反過來說,元件也可以簡單的方式加入至框架中,使得元件甚至框架的整合變得容易。
dependency injection:
dependency injection是實現 ioc的一種方式。依賴注入的意義是:保留抽象介面,讓元件依賴於抽象介面,當元件要與其它實際的物件發生依賴關係時,藉過抽象介面來注入依賴的實際物件。
依賴注入的三種實現方式:inte***ce injection、setter injection與constructor injection。
介面注入(inte***ce injection)
它是在乙個介面中定義需要注入的資訊,並通過介面完成注入。
設值方法注入(setter injection)
在各種型別的依賴注入模式中,設值注入模式在實際開發中得到了最廣泛的應用。設定模式的依賴注入機制更加直觀、也更加自然。
構造子注入(constructor injection)
構造子注入,即通過建構函式完成依賴關係的設定。
aop:
spring提供了面向切面程式設計的豐富支援,允許通過分離應用的業務邏輯與系統級服務(例如審計(auditing)和事務()管理)進行內聚性的開發。應用物件只實現它們應該做的——完成業務邏輯——僅此而已。它們並不負責(甚至是意識)其它的系統級關注點,例如日誌或事務支援。
什麼是介面?
介面定義了行為的協議,這些行為在繼承介面的類中實現。
介面定義了很多方法,但是沒有實現它們。類履行介面協議並實現所有定義在介面中的方法。
介面是一種只有宣告沒有實現的特殊類。
使用介面的優點:
client不必知道其使用物件的具體所屬類。
乙個物件可以很容易地被(實現了相同介面的)的另乙個物件所替換。
物件間的連線不必硬繫結(hardwire)到乙個具體類的物件上,因此增加了靈活性。
鬆散藕合(loosens coupling)。
增加了重用的可能性。
mysql運維 讀書筆記 Mysql 讀書筆記
mysql儲存時間有兩種型別 datetime和timestamp。分別說一下兩者的區別。datetime,以8位元組儲存時間,理論上可以從0000年儲存到9999年。並且沒有時區的概念,它儲存的就是乙個時間點的概念。timestamp和datetime最主要的不同就是,它是以4個位元組儲存,由19...
struts in action讀書筆記
struts in action 學習筆記 一 struts的控制流 因為web 應用是動態的,所以很難表現 乙個真正固定的控制流 取決於環境,不同的方式下有很多不同的事情發生 特別是在web 應用中。但是事情仍然有乙個通用的秩序。如果你是個struts,應用框架,甚至web 應用的新手,這些流程剛...
中 斷(讀書筆記)
裝置的中斷會打斷核心中程序的正常排程和執行,系統對更高吞吐率的追求勢必要求中斷服務程式盡可能地短小精悍。但是這個良好的願望往往與現實並不吻合。在大多數的系統中,當中斷到來時,要完成的工作往往並不是短小的,它可能要求進行較大量的耗時處理。為了在中斷執行時間盡可能短和中斷處理需要完成大量工作之前找乙個平...