Java 通过注释aspectJ中的值修改方法的参数

Java 通过注释aspectJ中的值修改方法的参数,java,aspectj,Java,Aspectj,我开始学习aspectJ,我想知道是否可以在文件.aj中创建aspect而不是在.java中创建注释,以下是我的示例: 我有这方面的修改方法中的参数值 @Around("execution(* *(..)) && @annotation(Te)") public Object setupParam(ProceedingJoinPoint pjp) throws Throwable { Object[] args = pjp.getArgs(); MethodSig

我开始学习aspectJ,我想知道是否可以在文件.aj中创建aspect而不是在.java中创建注释,以下是我的示例:

我有这方面的修改方法中的参数值

@Around("execution(* *(..)) && @annotation(Te)")
public Object setupParam(ProceedingJoinPoint pjp) throws Throwable {
    Object[] args = pjp.getArgs();
    MethodSignature signature = (MethodSignature) pjp.getSignature();
    Method method = signature.getMethod();
    Te myAnnotation = method.getAnnotation(Te.class);
    if (args != null) 
        args[0] = (int) args[0] * myAnnotation.w();
    return pjp.proceed(args);
}
我不知道如何在.aj文件中创建这个asspect,这可能吗?

是的,这是可能的

public aspect MyAspect {

    public MyAspect() {
      System.out.println("Aspect instance created");
    }

   pointcut myPointcut(ParameterType parameter)
               : ("execution(* *(..)) && @annotation(Te));

    Object around(ParameterType parameter) : myPointcut(parameter) {
       // Business logic here
       // 'thisJoinPointStaticPart' will give you access to join point
       // 'this' will give you access to advice instance itself
       // `return proceed();` will allow you to execute advised join point
    }
}
我建议使用,它提供了许多有用的功能,如intellisence autocomplete、javadocs和aspect visualization等。这可能会帮助您更快地学习。

是的,这是可能的

public aspect MyAspect {

    public MyAspect() {
      System.out.println("Aspect instance created");
    }

   pointcut myPointcut(ParameterType parameter)
               : ("execution(* *(..)) && @annotation(Te));

    Object around(ParameterType parameter) : myPointcut(parameter) {
       // Business logic here
       // 'thisJoinPointStaticPart' will give you access to join point
       // 'this' will give you access to advice instance itself
       // `return proceed();` will allow you to execute advised join point
    }
}

我建议使用,它提供了许多有用的功能,如intellisence autocomplete、javadocs和aspect visualization等。这可能会帮助您更快地学习。

谢谢您的帮助。我使用STS3.9.1,aspectJ是默认值。。我有点不明白参数类型的部分,你能更具体地解释一下吗?欢迎。ParameterType表示任何Java类型-例如Java.lang.String或Java.lang.Object-这些参数与建议方法的参数匹配-因此您可以访问建议方法的参数,并且可以访问建议方法中的这些对象。例如,您正在建议(拦截)参数为java.lang.String的方法-Aspectj中的建议声明并访问相同的参数类型。感谢您的帮助。我使用STS3.9.1,aspectJ是默认值。。我有点不明白参数类型的部分,你能更具体地解释一下吗?欢迎。ParameterType表示任何Java类型-例如Java.lang.String或Java.lang.Object-这些参数与建议方法的参数匹配-因此您可以访问建议方法的参数,并且可以访问建议方法中的这些对象。例如,您正在通知(拦截)参数为java.lang.String的方法—Aspectj中的通知声明并访问相同的参数类型。