/**
* 用於記錄日誌的工具類,它裡面提供了公共的**
*/@component
("logger"
)@aspect
//表示當前類是乙個切面類
public
class
logger
/** * 前置通知
*/// @before("pt1()")
public
void
beforeprintlog()
/** * 後置通知
*/// @afterreturning("pt1()")
public
void
afterreturningprintlog()
/** * 異常通知
*/// @afterthrowing("pt1()")
public
void
afterthrowingprintlog()
/** * 最終通知
*/// @after("pt1()")
public
void
afterprintlog()
/** * 環繞通知
* 問題:
* 當我們配置了環繞通知之後,切入點方法沒有執行,而通知方法執行了。
* 分析:
* 通過對比動態**中的環繞通知**,發現動態**的環繞通知有明確的切入點方法呼叫,而我們的**中沒有。
* 解決:
* spring框架為我們提供了乙個介面:proceedingjoinpoint。該介面有乙個方法proceed(),此方法就相當於明確呼叫切入點方法。
* 該介面可以作為環繞通知的方法引數,在程式執行時,spring框架會為我們提供該介面的實現類供我們使用。
** spring中的環繞通知:
* 它是spring框架為我們提供的一種可以在**中手動控制增強方法何時執行的方式。
!-- 配置srping的ioc,把service物件配置進來--
>
"accountservice"
class
="cn.qut.service.impl.accountserviceimpl"
>
<
/bean>
<
!-- 配置logger類 --
>
"logger"
class
="cn.qut.utils.logger"
>
<
/bean>
<
!--配置aop--
>
<
!-- 配置切入點表示式 id屬性用於指定表示式的唯一標識。expression屬性用於指定表示式內容
此標籤寫在aop:aspect標籤內部只能當前切面使用。
它還可以寫在aop:aspect外面,此時就變成了所有切面可用
-->
"pt1" expression=
"execution(* cn.qut.service.impl.*.*(..))"
>
<
/aop:pointcut>
<
!--配置切面 --
>
"logadvice" ref=
"logger"
>
<
!-- 配置前置通知:在切入點方法執行之前執行
"beforeprintlog" pointcut-ref=
"pt1"
>
<
/aop:before>
-->
<
!-- 配置後置通知:在切入點方法正常執行之後值。它和異常通知永遠只能執行乙個
"afterreturningprintlog" pointcut-ref=
"pt1"
>
<
/aop:after-returning>
-->
<
!-- 配置異常通知:在切入點方法執行產生異常之後執行。它和後置通知永遠只能執行乙個
"afterthrowingprintlog" pointcut-ref=
"pt1"
>
<
/aop:after-throwing>
-->
<
!-- 配置最終通知:無論切入點方法是否正常執行它都會在其後面執行
"afterprintlog" pointcut-ref=
"pt1"
>
<
/aop:after>
-->
<
!-- 配置環繞通知 詳細的注釋請看logger類中,有錯誤--
>
"aroundpringlog" pointcut-ref=
"pt1"
>
<
/aop:around>
<
/aop:aspect>
<
/aop:config>
<
/beans>
在使用註解實現後置通知和最終通知時,兩者的執行順序會出現問題,但後置通知和異常通知去沒有問題,建議使用環繞通知自己呼叫方法實現以上通知。
@configuration
@componentscan
(basepackages=
"cn.qut"
)@enableaspectjautoproxy
// 開啟動態**
public
class
springconfiguration
AOP基於註解實現
切面類 component 控制反轉 aspect 宣告切面類 public class forumadvisor after execution com.mitu.aspect.宣告後置增強 public void after around execution com.mitu.aspect.宣告...
基於註解SpringAOP實現
aop 動態 指在程式執行期間動態的將某段 切入到指定方法指定位置進行執行的程式設計方式 1 匯入aop模組 spring aop spring aspects org.springframework spring aspects 5.2.7.release 2 定義乙個業務邏輯類 mathcalc...
基於註解的日誌實現
隨著公司業務邏輯逐漸複雜,越來越多的專案採用了前後端分離進行開發,提高了開發效率,但是無形中增加了溝通和除錯成本。故開發人員在 中採用了列印前端或者終端傳遞過來引數資訊,這樣當出現問題時能夠排查和說明問題出在何處。aop log就是出於這樣一種使用場景而出現。總共兩種註解形式,一種是 註解加在con...