springboot aop 修改方法的参数和方法的返回值
实质就是拦截指定的方法之后,获取他们的参数,然后修改,并将修改的值传入到.proceed()方法中,然后如果想要修改返回的值,直接创建新的对象,返回回去即可,但是类型要与原方法返回的类型相同demo:@Pointcut("execution(* zhaoyy.springboot_shiro.mapper.*.*(..))")public void point() {...
·
实质就是拦截指定的方法之后,获取他们的参数,然后修改,并将修改的值传入到.proceed()方法中,然后如果想要修改返回的值,直接创建新的对象,返回回去即可,但是类型要与原方法返回的类型相同
demo:
@Pointcut("execution(* zhaoyy.springboot_shiro.mapper.*.*(..))")
public void point() {
}
@Around(value = "point()")
public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
Object obj = SecurityUtils.getSubject().getPrincipal();
if (obj != null) {
User user = (User) obj;
Integer id = user.getId();
log.warn("userId:" + id);
log.warn("args:" + JSONObject.toJSONString(proceedingJoinPoint.getArgs()));
Object[] args = proceedingJoinPoint.getArgs();
// 将获取的值进行修改
args[1] = "and status = 2";
// 然后继续执行该接口(这里修改参数)
Object ret = proceedingJoinPoint.proceed(args); //将新的参数传入
log.error("返回的结果为:"+JSONObject.toJSONString(ret));
// 这里定义一个新的对象用来返回,
// 这里是用来测试的,所以数据是随机的,但是返回的类型要与刚开始的类型相同
User user1 = new User();
user1.setUsername("有趣");
return user1; //返回新的返回值,类型与方法原来的返回值相同
}
return proceedingJoinPoint.proceed();
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)