当前位置: 首页 > 知识库问答 >
问题:

Spring AOP根据参数名获取方法参数值

淳于典
2023-03-14

是否可以根据SpringAOP中的参数名称获取方法参数值。

MethodSignature signature = (MethodSignature) proceedingJoinPoint.getSignature();

Method method = signature.getMethod();

method.getParameters().getName() 
// possible to get the paramater names 

这种方法将获得参数名,而不是值。

proceedingJoinPoint.getArgs()

将返回值而不是名称

那么是否可以根据参数名获取值?

共有2个答案

池砚文
2023-03-14

当我不得不使用AOP记录函数参数及其值时,我搜索了同样的事情,但是似乎没有直接的方法根据参数名称获取值。

然而,我注意到返回的值method.get参数(). getName()进行JoinPoint.getArgs()总是同步的。,即,对于函数

public void foo(String a, String b)

称为

foo("hello", "world");

method.getParameters().getName()依次返回[“a”,“b”]和proceedingJoinPoint.getArgs()依次返回[“hello”,“world”]。因此,您可以按索引遍历数组,对于每个索引i,第i个参数名称将对应于第i个参数值。

我找不到这种行为的支持文档,但是,嘿,这段代码已经在生产服务器上运行了大约一年,它从未产生过错误的结果。不过如果有人能链接到这种行为的文档,我会很高兴的。您甚至可以深入研究Reflection的代码来验证这种行为。

潘宪
2023-03-14

当我到处搜索时,不存在一个按名称给出参数值的函数,我编写了一个简单的方法来实现这一点。

public Object getParameterByName(ProceedingJoinPoint proceedingJoinPoint, String parameterName) {
    MethodSignature methodSig = (MethodSignature) proceedingJoinPoint.getSignature();
    Object[] args = proceedingJoinPoint.getArgs();
    String[] parametersName = methodSig.getParameterNames();

    int idx = Arrays.asList(parametersName).indexOf(parameterName);

    if(args.length > idx) { // parameter exist
        return args[idx];
    } // otherwise your parameter does not exist by given name
    return null;

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

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

  • 问题内容: 鉴于函数: 如何提取参数的数量和名称。即,鉴于我有提及func,因此我希望返回。 为此的使用场景是,我有一个装饰器,并且希望以与实际函数作为键一样的顺序使用方法参数。即,我打电话时装饰器的外观如何? 问题答案: 看一下模块-这将为你检查各种代码对象属性。 其他结果是 args和* kwargs变量的名称,以及提供的默认值。即。 请注意,在某些Python实现中,某些可调用对象可能不是自

  • 本文向大家介绍jquery获取url参数及url加参数的方法,包括了jquery获取url参数及url加参数的方法的使用技巧和注意事项,需要的朋友参考一下 使用jquery获取url以及使用jquery获取url参数是我们经常要用到的操作,下面通过文字说明加代码分析的形式给大家解析,具体详情请看下文。 1、jquery获取url很简单,代码如下: 其实只是用到了javascript的基础的wind

  • 我使用的是Spring4.3。是否可能获得传递给它的方法参数名和值?我相信这可以做到使用AOP(之前的建议),如果可能的话,你可以给我一个源代码。

  • 我试图通过JPA执行存储过程。我通过注释设置了存储过程: 该参数存在于数据库中,我正试图按如下方式调用该过程: 当我运行上面的代码时,我得到以下错误: 我卡在了由语句关闭引起的地方。我尝试过将它包装在事务中,但是实体管理器是共享的,我不能在那里创建事务。当我将它包装在事务模板中时,我得到了与上面相同的错误。 以下是正在使用的配置: