软件工程日报30
今天了解到了AOP切面的知识,用于代码增强,其中也用到了之前的自定义注解来辅助实现所要求的功能
/**
* 日志记录切面类
* 使用AOP实现服务层方法的调用日志记录
*/
@Aspect // 标识这是一个切面类
@Component // 声明为Spring组件,由Spring容器管理
public class LoggingAspect {
/**
* 定义切点表达式
* 匹配com.example.service包下所有类的所有方法
*/
@Pointcut("execution(* com.example.service.*.*(..))")
private void serviceLayer() {} // 切点方法签名,方法体通常为空
/**
* 前置通知:在目标方法执行前执行
* @param joinPoint 连接点对象,包含目标方法信息
*/
@Before("serviceLayer()")
public void logBefore(JoinPoint joinPoint) {
// 打印即将执行的方法名
System.out.println("Before method: " + joinPoint.getSignature().getName());
}
/**
* 返回通知:在目标方法成功执行后执行
* @param joinPoint 连接点对象
* @param result 目标方法返回结果
*/
@AfterReturning(
pointcut = "serviceLayer()", // 引用切点
returning = "result" // 指定返回结果参数名
)
public void logAfterReturning(JoinPoint joinPoint, Object result) {
// 打印方法返回结果
System.out.println("Method returned: " + result);
}
/**
* 异常通知:在目标方法抛出异常后执行
* @param joinPoint 连接点对象
* @param error 抛出的异常对象
*/
@AfterThrowing(
pointcut = "serviceLayer()", // 引用切点
throwing = "error" // 指定异常参数名
)
public void logAfterThrowing(JoinPoint joinPoint, Throwable error) {
// 打印方法抛出的异常信息
System.out.println("Exception in method: " + error);
}
// 还可以添加其他通知类型,如@Around环绕通知等
}

浙公网安备 33010602011771号