软件工程日报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号
浙公网安备 33010602011771号