前兩篇文章講了為了簡化**開發和鬆散耦合,spring分別使用了模板技術和依賴注入技術。這一篇再說下第三種技術,就是面向切面程式設計,簡稱aop。
在程式設計中,存在著一些分散在系統各處的零散操作,比如日誌、事務、安全等。面向切面程式設計是把這些分散於系統各處的零散的操作摘出來,交給spring框架去處理它們和業務方法的關係,開發人員只需要關注系統主要業務邏輯即可。這樣就可以簡化**開發和系統的層次。
aop涉及到兩個基本概念:切點和切面。
首先解釋下切點。可以把切點理解為「被切割出來的點」,在**中體現為乙個方法。
假如要在方法m執行前,執行日誌方法b;在方法m執行後,執行日誌方法a。讀這句話的時候,我們明顯感覺到,方法m被分離了出來,被凸顯了出來。這是因為日誌方法b和日誌方法a的執行,像是在方法m的前後切割了兩刀,把方法m摘了出來。
這裡方法m就稱為切點,因為它被日誌方法b和日誌方法a從業務邏輯流中切割了出來了。
再解釋下切面。可以把切面理解為「用來切割的刀」,在**中體現為乙個方法。上面的例子中,日誌方法b和日誌方法a就是兩個切面。
乙個切面不是僅僅可以用來切割乙個點,而是可以用來切割多個點。
那麼具體的應該如何操作呢?
在spring的配置檔案中,首先要定義切點,用aop:pointcut標籤來定義。aop:pointcut標籤指定了切點對應的方法。
由於乙個切面可以切割多個點,所以aop:pointcut標籤定義的是乙個切點集合(亦即方法的集合),而不僅僅是乙個切點。
然後要定義乙個切面,用aop:aspect標籤和aop:before、aop:after等標籤來定義。
aop:aspect標籤是乙個父標籤,表示切面的集合,其內部包含一組具體的切面,包括前切面、後切面、異常切面等,有集合的概念在裡面。這些具體的切面對應的方法都是屬於同乙個類,這個類在父標籤aop:aspect中指定。
aop:brefore、aop:after等標籤是子標籤,它們指定了具體切面對應的方法。
具體**如下:
package com.zaoren.aspect;user")public
class
edgeoperation
public
void
updatelist()
}
public
class
usercontroller
public
usercontroller(userservice uservice)
}
"控制台輸出為:edgeoperation
"class="
com.zaoren.aspect.edgeoperation
"/>
"pointcut1
" expression="
execution(public * com.zaoren.controller.*controller.*(..))
"/>
ref="
edgeoperation
">
"readbook
" pointcut-ref="
pointcut1
"/>
"updatelist
" pointcut-ref="
pointcut1
"/>
另外要注意一點,在丟擲異常前,會先執行after切面方法。
spring的主要內容之模板
spring的核心目的是為了簡化 的開發。為此,spring給出了以下幾種策略。1.模板。對於那些經常需要重複編寫的 spring給出了模板化解決方案。比如資料庫訪問的 除了對結果集的處理方式會變化,其他部分的 基本不會有變化,因此spring提供了乙個模板類,用來避免編寫重複部分的 在呼叫模板類的...
1 6 主要內容
本書的主要內容包括三個主要部分,分為程式設計技術 核心分析和專案例項。這些內容合為一體,讀者可以學習到在moblin上進行應用軟體開發的技能,最終目標是開發乙個moblin作業系統發行版。程式設計技術以c語言為基礎,除了簡單講解語法以外,主要是介紹在moblin系統中真正廣泛使用的gobject程式...
1 主要內容
pyqt5 基本視窗控制項 qmainwindow,qwidget,qlabel,qlineedit,等 pyqt5高階元件 qtableview,qlistview,容器,多執行緒等 pyqt5布局管理 qboxlayout,qgridlayout,qformlayout,巢狀布局等 pyqt5訊...