做直播網(wǎng)站用什么系統(tǒng)優(yōu)秀營銷軟文100篇
Spring aop切面編程
- 如何使用
- 利用@AuditAction創(chuàng)建切入點
如何使用
@Aspect // 1. 創(chuàng)建一個類,用@Aspect注解標記它,表明這是一個切面類。
@Component
public class LoggingAspect {// 2. 定義切點:在通知方法上,使用切點表達式來指定哪些方法將被攔截。// 切點表達式定義了你的通知將應用于哪些方法。@Pointcut("execution(* com.example.service.*.*(..))")public void serviceLayer() {}// 3. 定義通知:在切面類中,定義你的通知方法(前置通知、后置通知、返回后通知、異常通知、環(huán)繞通知),// 并使用相應的注解(@Before、@After、@AfterReturning、@AfterThrowing、@Around)標記。@Around("serviceLayer()")// ProceedingJoinPoint對象是JoinPoint的子接口,該對象只用在@Around的切面方法中public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {Object proceed = joinPoint.proceed(); // 執(zhí)行目標方法return proceed;}
}
通知是根據(jù)其類型,在切點指定的連接點(Join point)的內容執(zhí)行的特定時間點執(zhí)行的,主要的通知類型及其執(zhí)行時機:
- 前置通知(Before advice):在切點指定的方法執(zhí)行之前執(zhí)行。
- 后置通知(After advice):在切點指定的方法執(zhí)行之后執(zhí)行,無論方法執(zhí)行成功還是異常結束。?? after注解的通知方法會在finally里,一定會執(zhí)行。
- 返回后通知(After-returning advice):在切點指定的方法成功執(zhí)行之后執(zhí)行。
- 異常后通知(After-throwing advice):在切點指定的方法拋出異常后執(zhí)行。
- 環(huán)繞通知(Around advice):在切點指定的方法執(zhí)行前后都可以執(zhí)行,甚至可以決定是否執(zhí)行目標方法。
如果切點已有,可以隱式定義切點:
@After(value = "execution(public * mapper.*.delete*(..))")
// 切點:mapper目錄下的所有的delete開頭的public方法public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {Object proceed = joinPoint.proceed(); // 執(zhí)行目標方法return proceed;}
利用@AuditAction創(chuàng)建切入點
@AuditAction
注解用于標記在需要進行審計日志記錄的方法上,通過指定操作類型和目標表來描述該方法的行為。這種標記方式為 AOP 提供了一個“切入點”(Pointcut),使得 AOP 可以識別出哪些方法需要進行特定的處理。
假設有一個切面 ChangeLogAop
,它通過 AOP 攔截所有標記了 @AuditAction
的方法,并根據(jù)注解中的信息執(zhí)行相應的日志記錄操作:
@Aspect
@Component
public class ChangeLogAop {// 攔截標記了 @AuditAction 注解的方法@After(value = "@annotation(auditAction)", argNames = "joinPoint,auditAction")public void doAudit(JoinPoint joinPoint, AuditAction auditAction) {// 根據(jù) auditAction 中的信息(如操作類型和目標表)執(zhí)行日志記錄等操作}
}