aop环绕通知获取参数

一、注解的参数获取:

    @Around("myPointCut() && @annotation(a)")
    public Object mylogger(ProceedingJoinPoint pjp,AndawellTransactional a) throws Throwable {
            //注意@annotation(a)里的a要与AndawellTransactional a的a一致,叫什么无所谓。
            String dbTable = a.dbTable();//获取参数dbTable
            String dbId   = a.dbId();//获取参数dbId
            }

二、连接点方法参数的获取:

最常用:
1.获取参数:

 Object[] paramValues = joinPoint.getArgs();

2.获取参数名:

String[] aaa = ((CodeSignature)pjp.getSignature()).getParameterNames();
在这里插入代码片

其他:

0.获取注解

RequestMapping annotation = pjp.getTarget().getClass().getAnnotation(RequestMapping.class);
annotation.value(); //类
RequestMapping annotation1 = ((MethodSignature) pjp.getSignature()).getMethod().getAnnotation(RequestMapping.class);
annotation1.value(); //方法

1.获取的实体类

Object target = point.getTarget(); //实体类
String className = point.getTarget().getClass().getName(); //实体类名

2.获取的方法名称

String methodName = point.getSignature().getName();

3.获取的类方法的参数(注解参数直接a.)

Object[] args = point.getArgs();
//处理参数
 Object[] args = pjp.getArgs();
 Map myMap = JSON.parseObject(JSON.toJSONString(args[0]),Map.class);
 if (!myMap.containsKey(editId)) {
       return R.fail("参数格式有误");
 } else {
 editIdValue = myMap.get(editId).toString();
 versionBefore = 
 transactionalMapper.selectVersion(dbTable, dbId, editIdValue);
            }

4.获取的参数类型

Class[] parameterTypes = ((MethodSignature)point.getSignature()).getMethod().getParameterTypes();

5.通过反射获得拦截的method

Method m = target.getClass().getMethod(methodName, parameterTypes);

6.通过反射执行目标对象的连接点的方法

Object o = point.proceed();

7.通过反射执行目标对象连接点处的方法,使用新的参数列表替换原来的:

point.proceed(Object[] args);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值