spring是乙個輕量級的控制反轉(ioc)和面向切面程式設計(aop)的非入侵式框架(容器)。
ioc:ioc,另外一種說法叫di(dependency injection),即依賴注入。它並不是一種技術實現,而是一種設計思想。在任何乙個有實際開發意義的程式專案中,我們會使用很多類來描述它們特有的功能,並且通過類與類之間的相互協作來完成特定的業務邏輯。這個時候,每個類都需要負責管理與自己有互動的類的引用和依賴,**將會變的異常難以維護和極度的高耦合。而ioc的出現正是用來解決這個問題,我們通過ioc將這些相互依賴物件的建立、協調工作交給spring容器去處理,每個物件只需要關注其自身的業務邏輯關係就可以了。在這樣的角度上來看,獲得依賴的物件的方式,進行了反轉,變成了由spring容器控制物件如何獲取外部資源(包括其他物件和檔案資料等等
aop:面向切面程式設計,往往被定義為促使軟體系統實現關注點的分離的技術。系統是由許多不同的元件所組成的,每乙個元件各負責一塊特定功能。除了實現自身核心功能之外,這些元件還經常承擔著額外的職責。例如日誌、事務管理和安全這樣的核心服務經常融入到自身具有核心業務邏輯的元件中去。這些系統服務經常被稱為橫切關注點,因為它們會跨越系統的多個元件。
通知: 通知定義了切面是什麼以及何時使用的概念。spring 切面可以應用5種型別的通知:
前置通知(before):在目標方法被呼叫之前呼叫通知功能。
後置通知(after):在目標方法完成之後呼叫通知,此時不會關心方法的輸出是什麼。
返回通知(after-returning):在目標方法成功執行之後呼叫通知。
異常通知(after-throwing):在目標方法丟擲異常後呼叫通知。
環繞通知(around):通知包裹了被通知的方法,在被通知的方法呼叫之前和呼叫之後執行自定義的行為。
連線點:是在應用執行過程中能夠插入切面的乙個點。
切點: 切點定義了切面在何處要織入的乙個或者多個連線點。
切面:是通知和切點的結合。通知和切點共同定義了切面的全部內容。
引入:引入允許我們向現有類新增新方法或屬性。
織入:是把切面應用到目標物件,並建立新的**物件的過程。切面在指定的連線點被織入到目標物件中。在目標物件的生命週期中有多個點可以進行織入:
編譯期: 在目標類編譯時,切面被織入。這種方式需要特殊的編譯器。aspectj的織入編譯器就是以這種方式織入切面的。
類載入期:切面在目標載入到jvm時被織入。這種方式需要特殊的類載入器(class loader)它可以在目標類被引入應用之前增強該目標類的位元組碼。
執行期: 切面在應用執行到某個時刻時被織入。一般情況下,在織入切面時,aop容器會為目標物件動態地建立乙個**物件。springaop就是以這種方式織入切面的。
spring學習筆記
spring中兩個十分重要的概念 ioc di aop 1.ioc di inverse of control dependence injection ioc 控制反轉,看起來比較牛b,說起來十分簡單。就是不使用傳統的將類的依賴關係用硬編碼來維護的方式,而是讓容器來管理類之間的依賴,依賴關係在全在...
Spring 學習筆記
實現ioc的兩種方式 dependency injection 和 service locator 關於依賴注入 依賴注入指的是,當您在a物件內部需要b物件的某個功能時,a就依賴於b,您可以直接在a內部例項化b,但日後要修改就麻煩些。如果您不直接在a內部例項化b,而是通過ioc將乙個b例項從外部設定...
spring學習筆記
spring的bean的生命週期 只用反射機制通過class路徑獲得class型別,呼叫預設建構函式例項化乙個物件。呼叫bean的property設定物件的屬性 set方法 如果bean的類實現了beannameaware介面,那麼還會呼叫setbeanname方法 如果bean的類實現了beanf...