Spring AOP传递控制器方法的参数

时间:2015-03-29 07:29:57

标签: spring aop spring-aop

我有一个控制器如下

@Controller
@RequestMapping(value = "/")
public class HomeController {
    @RequestMapping("/")
    public String home(Map<String,Object> map) {
        map.put("val2","val2");
        return "mainpage"; //it is the jsp file name
    }
}

现在在我的方法类方法中,我想在控制器方法

中定义的这个映射变量中放入另一个值
@Aspect
public class UserInfo {
    @Before("execution(* org.controller.HomeController(..)) ")
    public void m1(){
        //Map<String,Object> map
        // get the map here and add
        map.put("val1","val1);
    }
}

所以当我调用这个地图形式的mainpage.jsp文件时,我得到两个值为

${val1}
${val2}

我该怎么办?

2 个答案:

答案 0 :(得分:1)

您可以在JoinPoint上使用getArgs来获取方法的参数,如:

Object[] signatureArgs = joinPoint.getArgs();

你的m1方法应该是:

public void m1(JoinPoint joinPoint){

你已经知道你只是对方法有参数,所以你需要输入把它投射到一个地图然后把你的新值和调用proceed方法继续进行进一步的实际调用。

答案 1 :(得分:0)

实际上 SMA 的解决方案很不错,但不是很优雅且类型安全。如何在切入点中将参数绑定到正确键入且方便命名的参数?

@Before("execution(* org.controller.HomeController.*(..)) && args(map)")
public void m1(Map<String, Object> map) {
    map.put("AspectJ", "magic");
}