aop
aop是oop的有益補充,他為程式開發提供了乙個嶄新的思考角度,可以將重複性的橫切邏輯抽取到統一的模組中,通過oop的縱向抽象和aop的橫向抽取,程式才能真正解決複雜性**問題。
spring採用jdk動態**和cglib動態**的技術在執行期間植入增強,所以我們不需要裝備特殊的編譯器或者類裝載器就可以使用aop的功能。要使用jdk動態**,目標類必須實現介面,而cglib不對目標類做任何限制,他通過動態生成目標子類的方式提供**。jdk在建立**物件時效能高於cglib,而生成**物件的執行效能卻比chlib的低,入股是singleton的**,我們推薦使用cglib動態**。
spring只能在方法級別上植入增強,spring提供了4中型別的方法增強,分別是前置增強、後置增強、環繞增強和異常丟擲增強,此外還有一種特殊的引介增強,引介增強是類級別的,他為目標類織入新的介面實現。從廣義上說,增強其實就是一種最簡單的切面,他既包括橫切**也包括切點資訊,只不過他的切點只是簡單的方法相對位置的資訊。所以增強一般都需要和切點聯合才可以表示乙個更具使用性的切面。
在spring中,普通的切點通過目標類名和方法名描述切點的資訊。流程切點是比較特殊的切點,他通過方法呼叫堆疊的執行環境資訊來決定連線點。有時,我們需要通過切點的交叉或合併描述乙個最終的切點,這時,可以使用composablepointcut的復合切點。切面是增強和切點的聯合體,我們可以很方便地通過spring提供的proxybeanfactory將切面織入到不同的目標類中。當然,為每乙個目標類手工配置乙個切面是比較煩瑣的,spring利用beanpostprocessor可干涉bean生命週期的機制,提供了一些可以自動建立**,織入切面的自動**建立器,其中defaultadvisorautoproxycreator是
功能強大的自動**建立器,他可以將容器中所有advisor自動織入到目標bean中。
spring aop通過pointcut(切點)指定在哪些類的哪些方法上織入橫切邏輯,通過advice(增強)描述橫切邏輯和方法的具體織入點(方法前、方法後、方法的兩端等)。
此外,spring通過advisor(切面)將pointcut和advice兩者組裝起來。有了advisor的資訊,spring就可以利用jdk或cglib的動態**技術採用統一的方式為目標bean
建立織入切面的**物件了。
Spring3 X企業開發實戰(一) 入門例項
底層dao,註解為 repository,用spring的jdbc模板類來進行實現,業務層service,註解為 service,然後 autowired注入dao,再呼叫dao處理資料。這個業務層主要是進行資料的處理,所以這裡的 塊多一些 表現層的controller,註解為 controller...
Spring 3 x 資源的解析
在srping中容器的啟動,需要載入資源檔案配置的bean資訊。首先第一步就是解析資源檔案定義的bean資訊。在查閱原始碼之後,sring提供了兩種資源檔案解析。一種是通過xml,一種是通過屬性檔案 properties 這兩種方式都有相應的提供類。此筆記,在於分析spring 讀取資源檔案的整體架...
Spring3 x與4 x的區別
增加了 restcontroller annotation,就是把 controller和 reponsebody打包了,省得大家再去每個方法上加乙個 responsebody了。新加了asyncresttemplate類,可以用來構建非同步呼叫的restful client,具體用法看這兒 或者這...