基於註解配置的AOP

2021-10-19 21:41:38 字數 2553 閱讀 5832

首先在spring的xml檔案中完成相應的配置:

在持久化類中加上註解,方便使用id呼叫

注意這裡設定了乙個異常 1/0的異常

日誌類的**如下:

import org.aspectj.lang.annotation.*;

import org.springframework.stereotype.component;

/** * 用於記錄日誌的工具類,它裡面提供了公共的**

*/@component("logger")

@aspect//表示當前類是乙個切面類

public class logger

//前置通知

@before("execution(* com.itheima.service.impl.*.*(..))")

public void beforeprintlog()

/*** 後置通知

*/@afterreturning("execution(* com.itheima.service.impl.*.*(..))")

public void afterreturningprintlog()

/*** 異常通知

*/@afterthrowing("execution(* com.itheima.service.impl.*.*(..))")

public void afterthrowingprintlog()

/*** 最終通知

*/@after("execution(* com.itheima.service.impl.*.*(..))")

public void afterprintlog()

/*** 環繞通知

* 問題:

* 當我們配置了環繞通知之後,切入點方法沒有執行,而通知方法執行了。

* 分析:

* 通過對比動態**中的環繞通知**,發現動態**的環繞通知有明確的切入點方法呼叫,而我們的**中沒有。

* 解決:

* spring框架為我們提供了乙個介面:proceedingjoinpoint。該介面有乙個方法proceed(),此方法就相當於明確呼叫切入點方法。

* 該介面可以作為環繞通知的方法引數,在程式執行時,spring框架會為我們提供該介面的實現類供我們使用。

** spring中的環繞通知:

* 它是spring框架為我們提供的一種可以在**中手動控制增強方法何時執行的方式。

如上圖所示:需要註明類的名稱以及切面類的的表示。同時在,每個環繞方法中設定切入點的表示式

執行結果如上圖所示。顯然成功了

**如下:

import org.aspectj.lang.proceedingjoinpoint;

import org.aspectj.lang.annotation.around;

import org.aspectj.lang.annotation.aspect;

import org.aspectj.lang.annotation.pointcut;

import org.springframework.stereotype.component;

/** * 用於記錄日誌的工具類,它裡面提供了公共的**

*/@component("logger")

@aspect//表示當前類是乙個切面類

public class logger catch (throwable t)finally }}

view code

其他的一律不變

基於註解的AOP配置

before 前置通知 afterreturning 後置通知 after 最終通知 afterthrowing 異常通知 around 環繞通知 pointcut 指定切入點表示式 使用方法 pointcut execution cn.itcast.service.impl.private voi...

Spring基於註解AOP配置

一 spring基於註解aop配置 1.假設建立乙個accountservice需要增強 執行其中每乙個方法都會加乙個記錄日誌的方法 則再建立乙個日誌類實現記錄日誌方法 將該類注入spring容器 component logger aspect 表示當前類是乙個切面類 public class lo...

基於註解的AOP

aop是oop的延續,是aspect oriented programming的縮寫,意思是面向切面程式設計。可以通過預編譯方式和執行期動態 實現在不修改源 的情況下給程式動態統一新增功能的一種技術。aop實際是gof設計模式的延續,設計模式孜孜不倦追求的是呼叫者和被呼叫者之間的解耦,aop可以說也...