Spring AOP应用指南:概念、通知与表达式分析
// 引入Spring AOP相关的类
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
// 使用@Component注解将该类标记为Spring的bean
@Component
@Aspect // 使用@Aspect注解声明该类为一个切面类
public class LoggingAspect {
// 声明一个切点,匹配com.example.service包下所有类的所有方法
@Pointcut("execution(* com.example.service.*.*(..))")
public void serviceLayerMethods() {
}
// 在切点方法执行前执行
@Before("serviceLayerMethods()")
public void beforeAdvice(JoinPoint joinPoint) {
System.out.println("Before: " + joinPoint.getSignature());
}
// 在切点方法执行后执行
@After("serviceLayerMethods()")
public void afterAdvice(JoinPoint joinPoint) {
System.out.println("After: " + joinPoint.getSignature());
}
// 环绕通知,可以在方法执行前后自定义行为
@Around("serviceLayerMethods()")
public Object aroundAdvice(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
System.out.println("Around: Before method execution");
Object result = proceedingJoinPoint.proceed(); // 执行目标方法
System.out.println("Around: After method execution");
return result;
}
}
这个代码示例展示了如何在Spring应用中使用AspectJ注解来创建一个简单的日志切面。这个切面会拦截com.example.service
包下所有类的所有方法,并在方法执行前后打印日志。这是AOP非常基础且重要的应用场景。
评论已关闭