在開發過程中,不少有spring aop的使用,在面向切面程式設計時,我們會使用< aop:aspect>;在進行事務管理時,我們會使用< aop:advisor>。那麼,對於< aop:aspect>與< aop:advisor>的區別,具體是怎樣的呢?
至於兩者的區別,網上有很多資料,但是似乎都不能說清楚。
首先,我們需要明確兩者的概念。
下面,我們列舉兩者的幾個區別。
實現方式不同
< aop:aspect>定義切面時,只需要定義一般的bean就行,而定義< aop:advisor>中引用的通知時,通知必須實現advice介面。
下面我們舉例說明。
首先,我們定義乙個介面sleepable和這個介面的實現human,**如下:
public inte***ce sleepable
public class human implements sleepable
}
下面是< aop:advisor>的實現方式:
//定義通知
public class sleephelper implements methodbeforeadvice,afterreturningadvice
@override
public void afterreturning(object arg0, method arg1, object arg2,
object arg3) throws throwable
}//aop配置
下面是< aop:aspect>的實現方式:
//定義切面
public class sleephelperaspect
public void aftersleep()
}//aop配置
測試**如下:
public class testaop
private static void method1()
private static void method2()
//執行結果
//睡覺前要**服!
//我要睡覺了!
//起床後要穿衣服!
}
使用場景不同
< aop:advisor>大多用於事務管理。
例如:
< aop:aspect>大多用於日誌,快取
其實,不管是< aop:advisor>還是< aop:aspect>最終的實現邏輯是一樣的。
小結:
可以看出,< aop:advisor>和< aop:aspect>其實都是將通知和切面進行了封裝,原理基本上是一樣的,只是使用的方式不同而已。
附: 對於這個問題的理解,其實尚未有乙個深入的認識,下面推薦大家幾篇博文,希望共同交流。
aop aspect與aop advisor的區別
在開發過程中,不少有spring aop的使用,在面向切面程式設計時,我們會使用 aop aspect 在進行事務管理時,我們會使用 aop advisor 那麼,對於 aop aspect 與 aop advisor 的區別,具體是怎樣的呢?至於兩者的區別,網上有很多資料,但是似乎都不能說清楚。首...
SQL與NoSQL MySQL與NoSQL的融合
寫這一篇內容的原因是mysql5.6.2突然推出了memcached的功能。nosql to innodb with memcached的出現,可以看出nosql對關聯式資料庫的確產生了巨大的影響,個人覺得這是乙個非常大的進步,可以讓開發人員更加方便的使用nosql和關聯式資料庫。nosql一般被認...
指標與陣列 a與 a區別
假設宣告了乙個陣列a,則 a表示陣列a的首位址,a與 a 0 表示陣列a首元素的首位址,那麼 a 1與a 1有哪些區別呢?通過下面的實驗來說明。int i 0 int a 5 int p int a 1 for i 0 i 5 i printf a 0x p,a 0x p,a 1 0x p n a,...