《Spring Recipes》第三章笔记4:Reusing Pointcut Definitions
问题
使用注解在不同的通知中声明的切面表达式(pointcut expression)可能相同。
解决方案
Spring支持单独定义一个切面表达式(pointcut expression),然后再不同的通知中重用(reuse)。
步骤:
1、首先建立一个切面,在@Pointcut注解中定义表达式,方法内容为空。
public class CalculatorPointcuts {@Pointcut("execution(* *.*(..))")public void loggingOperation() {}}
2、在通知中直接使用以上方法名替代表达式即可。
public class CalculatorLoggingAspect {... ... @Before("CalculatorPointcuts.loggingOperation()") public void logBefore(JoinPoint joinPoint) { ... ... } @AfterReturning(pointcut = "CalculatorPointcuts.loggingOperation()",returning = "result") public void logAfterReturning(JoinPoint joinPoint, Object result) { ... ... } @AfterThrowing(pointcut = "CalculatorPointcuts.loggingOperation()",throwing = "e") public void logAfterThrowing(JoinPoint joinPoint, IllegalArgumentException e) { ... ... }@Around("CalculatorPointcuts.loggingOperation()")public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {...}}