016,Spring 通知传递参数

这篇博客介绍了如何在Spring AOP的通知方法中获取切入点方法的参数。通过定义切点表达式并使用`args`参数,可以在前置、后置、正常返回和异常返回通知中访问传入的参数。示例代码展示了一个切面类`TranAspect`,它在不同通知中打印传入的对象,展示了事务管理的模拟过程。
摘要由CSDN通过智能技术生成

V哥官网:http://www.vgxit.com

本博客对应视频教程:http://www.vgxit.com/course/23


Spring 通知传递参数


1,概述

我们上面在执行切点方法的时候,我们可能会传入一些参数给对应的切点方法,比如我们UserService的add方法:

package com.vgxit.learn.spring.ktdm.springaop.service.impl;

import com.vgxit.learn.spring.ktdm.springaop.po.User;
import com.vgxit.learn.spring.ktdm.springaop.service.IUserService;
import org.springframework.stereotype.Component;

@Component
public class UserService implements IUserService {
    @Override
    public void add(User user) {
        System.out.println("添加用户[" + user + "]到数据库");
    }
}

这个方法传入了一个User类型的参数。那么问一下同学们,如果我想要在对应的前置通知,后置通知....我们想要获取到这个User类型的参数怎么办?


2,具体操作

我们在前置,后置,正常返回,异常返回四个通知方法中,我们获取传入的参数。

1,我们修改一下我们的切面类

package com.vgxit.learn.spring.ktdm.springaop.aspect;

import org.aspectj.lang.annotation.*;

@Aspect//使用了这个注解就表明该类为一个切面类
public class TranAspect {
    @Pointcut("execution(* com.vgxit.learn.spring.ktdm.springaop.service.impl.*.*(..)) && args(o)")
    public void tranPointer(Object o){}

    @Before("tranPointer(o)")
    public void before(Object o) {
        System.out.println("before:" + o);
        System.out.println("获取数据库连接");
        System.out.println("开启事务");
    }

    @After("tranPointer(o)")
    public void after(Object o) {
        System.out.println("after:" + o);
        System.out.println("对应逻辑执行完成");
    }

    @AfterReturning("tranPointer(o)")
    public void afterReturning(Object o) {
        System.out.println("afterReturning:" + o);
        System.out.println("提交事物");
    }

    @AfterThrowing("tranPointer(o)")
    public void afterThrowing(Object o) {
        System.out.println("afterThrowing:" + o);
        System.out.println("事物回滚");
    }
}

2,调用测试代码看效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

V哥学It

赏小的一个钱吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值