方法public int quantity()在ShoppingCart.java中的切入点不起作用。我正在尝试创建一个切入点来捕获方法public int quantity()的返回值,但是@AfterReturning切入点的相关建议似乎在main方法调用quantity方法之后也没有被调用(参见文件AuthenticationAspect.java,该文件试图定义afterReturning切入点)。
文件ShoppingCart.java
package org.example;
import org.springframework.stereotype.Component;
@Component
public class ShoppingCart {
public int quantity()
{
System.out.println("\n Quantity method called");
return 2;
}
}AuthenticationAspect.java
package org.example;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class AuthenticationAspect {
@Pointcut("execution(* org.example.ShoppingCart.quantity())")
public void afterReturningPointCut()
{
}
@AfterReturning(pointcut = "afterReturningPointCut()", returning = "retVal")
public void afterReturning(String retVal)
{
System.out.println("The quantity used is " + retVal);
}
}Main.java
package org.example;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(BeanConfig.class);
ShoppingCart cart = context.getBean(ShoppingCart.class);
cart.quantity();
}
}发布于 2022-11-16 16:31:19
returning子句仅限制与返回指定类型值的方法执行的匹配。
ShoppingCart.quantity()方法返回int,因此它与通知中声明的String返回类型不匹配。您可以将retVal类型更改为int或Object,这与任何返回值都匹配。
参考:回覆忠告后
https://stackoverflow.com/questions/74462459
复制相似问题