码迷,mamicode.com
首页 > 编程语言 > 详细

Spring aop: 如何在增强方法中获取并修改目标函数的参数

时间:2016-06-30 01:06:00      阅读:590      评论:0      收藏:0      [点我收藏+]

标签:

总结网上的方法,自己实验了一下,目标函数如下:

@RequestMapping(value="/dispatch",produces = "text/html; charset=UTF-8")  
         @ResponseBody 
        @ControllerPointcut(str = "OKOK") 
         public String dispatch(@RequestParam("messageA") String messageA,
                                 @RequestParam("messageB") String messageB,
                                 @RequestParam("messageC") String messageC)throws Exception{  
             return "<script>alert(‘"+messageA+messageB+messageC+"‘);</script>";  
         }

增强方法:

@Pointcut("@annotation(com.annotation.ControllerPointcut)")
    private void controller(){}


@Around("controller()")
    public Object test(ProceedingJoinPoint pjp) throws Throwable{
        Object[] args = pjp.getArgs();
        for(Object obj : args){
            System.out.println("arguments: "+obj);
        }
        Object args0 = args[0];
        Object args2 = args[2];
        args[0] = args2;
        args[2] = args0;
        Object retVal = pjp.proceed(args);
        return retVal;
    }

页面ajax:

$.ajax({
        url:"test/dispatch.do",
        type:"post",
        dataType:"html",
        data:{messageA:"This", messageB:"Is", messageC:"Message"},
        success:function(result){
            $("#container-top").append(result);
        }
    });

结果:

页面:

MessageIsThis

Eclipse控制台:

arguments: This
arguments: Is
arguments: Message

 

总结:

1.ProceedingJoinPoint对象取到的args[]内的 参数顺序 就是 目标函数声明时的参数顺序,可以逐一对应

2.直接通过 args[‘index’] = ...  方式来修改,再通过 Object retVal = pjp.proceed(args); return retVal; 即可改变并传入参数;

3.如果对象方法的参数中包括 HttpServletRequest request, 那么直接调用其getParameterMap().put(...)方法改变Parameter会报错“parameterMap is locked”,而其set相关的方法又只有setAttribute,即设置用于多个controller方法跳转的attribute,就算设置成某parameter相同的名字,也无法覆盖,毕竟是不一样的对象。所以,通过截获request本身来改变参数的方法行不通。

4.另外还有在声明@annotation时,加入args(..) 这样的方法可以直接截获目标函数的参数,但,暂时不知道,如何只通过这个方法修改参数并传回目标函数。。。。

 

Spring aop: 如何在增强方法中获取并修改目标函数的参数

标签:

原文地址:http://www.cnblogs.com/ajjiangxin/p/5628608.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!