深度解析 Spring 源码:解密AOP切点和通知的实现机制
// 假设我们有一个切面定义,包含一个切点和几个通知
@Aspect
public class MyAspect {
// 切点定义
@Pointcut("execution(* com.example.service.*.*(..))")
public void serviceLayerMethods() {}
// 前置通知
@Before("serviceLayerMethods()")
public void beforeAdvice(JoinPoint joinPoint) {
System.out.println("Before: " + joinPoint.getSignature());
}
// 后置通知
@AfterReturning("serviceLayerMethods()")
public void afterReturningAdvice(JoinPoint joinPoint) {
System.out.println("AfterReturning: " + joinPoint.getSignature());
}
// 环绕通知
@Around("serviceLayerMethods()")
public Object aroundAdvice(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
System.out.println("Around: Before " + proceedingJoinPoint.getSignature());
Object result = proceedingJoinPoint.proceed();
System.out.println("Around: After " + proceedingJoinPoint.getSignature());
return result;
}
}
这个示例展示了如何在Spring AOP中定义一个切面,包括一个切点和不同类型的通知(@Before, @AfterReturning, @Around)。每个通知方法都会在匹配切点表达式的方法执行时被调用。这里的切点表达式为execution(* com.example.service.*.*(..))
,意味着会匹配com.example.service
包下所有类的所有方法。
评论已关闭