aop aspect與aop advisor的區別

2021-08-20 12:00:32 字數 1513 閱讀 3352

在開發過程中,不少有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,...