Spring AOP 传递 Controller 方法的参数

标签 spring aop spring-aop

我有一个 Controller 如下

@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
    }
}

现在,在我的方面类方法中,我想在 Controller 方法中定义的映射变量中放入另一个值

@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 文件中调用这个 map 时,我得到的两个值都是

${val1}
${val2}

我该怎么做???

最佳答案

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

Object[] signatureArgs = joinPoint.getArgs();

你的 m1 方法应该是这样的:

public void m1(JoinPoint joinPoint){

您已经知道该方法只有一个参数,因此您需要将其类型转换为映射,然后放入新值并调用继续方法以继续进一步的实际调用。

关于Spring AOP 传递 Controller 方法的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29326705/

相关文章:

java - JPA 继承 entitymanager.find 产生 ClassCastException

java - Spring AOP - 如何使父上下文中定义的方面在子上下文中工作?

java - 我的方面的许多实例是在 spring 容器外部创建的,并且属性没有被注入(inject)

java - Wildfly 上的 SpringSecurity 错误

java - Spring - 以编程方式生成一组 bean

java - Spring Security + LDAP 总是返回 BadCredentialsException

java - 通过使用AspectJ,如何获取由 'Object'关键字创建的 'new'引用?

java - 将调用者带到 Spring AOP 代理

使用 AOP 调用方法前后的 Javascript 控制台输出

java - Spring AOP 与 Aspectj