gpt4 book ai didi

java - spring如何从方法中获取args名称

转载 作者:行者123 更新时间:2023-12-02 05:35:26 25 4
gpt4 key购买 nike

在 spring 中,它像这样表达参数名称:

@Before(
value="com.xyz.lib.Pointcuts.anyPublicMethod() && target(bean) && @annotation(auditable)",
argNames="bean,auditable")
public void audit(JoinPoint jp, Object bean, Auditable auditable) {
AuditCode code = auditable.value();
// ... use code, bean, and jp
}

在文档中,它说您可以从“argNames”属性的值中省略参数的名称。 spring如何从anyPublicMethod获取argNames("bean,auditable")?

java有提供一些api来获取参数名称吗?

我认为它使用aspectJ来解析表达式,aspectJ是否提供了该功能?

最佳答案

在Java 8中我们可以使用反射来获取参数名称,参见http://docs.oracle.com/javase/tutorial/reflect/member/methodparameterreflection.html 。如果类是使用 -g:vars 编译的,则参数名称将会出现。

在早期版本中,我们需要使用一些工具,例如 Javassist:

public static void main(String[] args) throws Exception {
ClassPool pool = ClassPool.getDefault();
CtClass c = pool.get("test.Test");
CtMethod m = c.getDeclaredMethod("main");
MethodInfo methodInfo = m.getMethodInfo();
LocalVariableAttribute t = (LocalVariableAttribute) methodInfo.getCodeAttribute().getAttribute(javassist.bytecode.LocalVariableAttribute.tag);
int i = t.nameIndex(0);
String v = methodInfo.getConstPool().getUtf8Info(i);
System.out.println(v);
}

打印

args

关于java - spring如何从方法中获取args名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25007286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com