当前位置: 首页 > 面试题库 >

使用Spring AOP获取方法参数?

卫浩瀚
2023-03-14
问题内容

我正在使用Spring AOP并具有以下方面:

@Aspect
public class LoggingAspect {

    @Before("execution(* com.mkyong.customer.bo.CustomerBo.addCustomer(..))")
    public void logBefore(JoinPoint joinPoint) {

        System.out.println("logBefore() is running!");
        System.out.println("hijacked : " + joinPoint.getSignature().getName());
        System.out.println("******");
    }

}

以上方面拦截addCustomer方法执行。addCustomer方法将字符串作为输入。但是我需要在addCustomer方法内部记录传递给方法的输入logBefore
有可能这样做吗?


问题答案:

您有几种选择:

首先,您可以使用JoinPoint#getArgs()返回的方法,其中Object[]包含建议方法的所有参数。您可能需要进行一些转换,具体取决于您想对它们进行什么处理。

其次,可以args像这样使用切入点表达式:

// use '..' in the args expression if you have zero or more parameters at that point
@Before("execution(* com.mkyong.customer.bo.CustomerBo.addCustomer(..)) && args(yourString,..)")

那么您的方法可以改为

public void logBefore(JoinPoint joinPoint, String yourString)


 类似资料:
  • 本文向大家介绍使用JavaScript获取地址栏参数的方法,包括了使用JavaScript获取地址栏参数的方法的使用技巧和注意事项,需要的朋友参考一下 调用的时候统一做这样的判断,避免你没有传参数的话,比如你的地址是 abc.html 后面没有参数,那强行输出调用结果有的时候会报错 这样就不会报错了! 注释:ECMAScript v3 已从标准中删除了 unescape() 函数,并反对使用它,因

  • 问题内容: 给定以下Go方法: 我想反映参数的名称(在这里)。 我尝试了以下操作,但是它返回了结构名称(在这里): 如何获得参数名称? 问题答案: 无法获取方法或函数的参数名称。 这样做的原因是因为名称对于调用方法或函数的人并不是很重要。重要的是参数的类型及其顺序。 甲功能类型表示集合的具有相同参数和结果类型的所有功能。无论参数名称如何,具有相同参数和结果类型的2个函数的类型均相同。以下代码显示:

  • 一些日志记录需要在类的静态方法执行前后完成。我试图使用Spring AOP实现这一点,但它不起作用,对于普通方法来说,它是起作用的。请帮助我理解如何实现这一点,如果可以使用注释来完成,那就太好了。

  • 问题内容: 在 Java 6中 ,假设我具有以下方法签名: 我想知道在运行时传递给任何其他参数的值,这里重要的一点是我想通过参数名称获取该值。 我知道如何使用或获取参数类型的列表。 理想情况下,我想获取参数 名称 而不是类型的列表。有办法吗? 问题答案: 如果您告诉编译器将其包括在内,则可以使用参数名称(使用调试信息进行编译)。Spring 可以帮助您获取名称。该默认实现使用ASM 这样做。 与您

  • 问题内容: 我在这里问了一些Java问题:如何解析lambda参数的通用类型?,但这有点不同。 我有方法签名: 我可以使用它: 我可以以某种方式解析该实际的泛型类型吗?我的意思是我想进入那种方法。 顺便说一句,我可以解决这样的问题: 但是,如果我们将lambda更改为内联实现,它看起来就不符合要求。 问题答案: 不,这是不可能的。 您无法获得类似的信息,因为泛型会在运行时被擦除。您确实需要传递权限