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

AspectJ-获取带注释的方法参数的值

干弘深
2023-03-14

我创建了自定义注释@myAnn。我将用它来注释方法参数。

我在这里找到了一些示例代码,展示了如何创建针对自定义注释的切入点。

所以现在,我创建了一个带切入点的方面。但是我不知道如何获得用myAnn注释的参数值。

@Aspect
public class MyAnnAspect {

    @Around("execution(@my.package.test.MyAnn") // I hope this pointcut will work
    public void changeParameter(final ProceedingJoinPoint pjp) throws Throwable {
        // How I can there get parameter value (and chage it)? 
    }
}

共有1个答案

赵征
2023-03-14

我认为切入点不起作用,因为它不是注释的方法,可以这样做:

MethodSignature ms = (MethodSignature) pjp.getSignature();
Method m = ms.getMethod();
Annotation[][] pa = m.getParameterAnnotations();

现在您可以遍历注释,并找到正确的注释,如果存在,则通过调用pjp.getargs()获取参数值。

 类似资料:
  • 在执行通知时,如何获取的和?我正在使用Spring 4.0.6、AspectJ 1.7.4

  • 所以目前,这是我所做的(不起作用): 这是与建议匹配的代码: 以及由junit测试生成的跟踪:

  • 我有一个方面,处理所有有自定义注释的方法。 注释有一个枚举参数,我必须在方面中获得值: 有没有办法从ProcedingJoinPoint获得实现方法的签名?

  • 我试图截取带注释方法的执行,以记录执行时间;因此,我创建了一个新注释: 我将注释应用于我想要跟踪的方法(该方法的类没有注释,如@Service或@Component;这是一个问题吗?) 然后我创建类和@周围方法: 我在pom中添加了spring boot starter aop依赖项,并在主类中添加了@EnableSpectProxy(带@SpringBootApplication注释的类)。我希

  • 我试图让aspectj拦截带注释的方法: 我删除了!为了简洁起见,在(InterceptMeAspect)内,但它并没有拦截太多。如果我删除注释约束(在(@InterceptMe*)内),它可以工作,但会拦截所有内容,这会造成一个大问题。 输出字节码似乎有完整的注释,所以我希望注释标准匹配。我正在或试图进行编译时编织。这很重要,因为我有另一个方面确实使用上面相同的方法工作。我怀疑该方面正在搞乱这个

  • 我有一个可用于注释的方面: 连接点: 我可以在具有