【发布时间】:2019-12-07 23:39:11
【问题描述】:
各位程序员大家好。
我正在开发一个 SpringBoot Rest API,我正在尝试使用一个 Aspect,它在执行带有自定义注释的方法后执行一些操作。
所以我有这个自定义注释:
@Retention(RUNTIME)
@Target(METHOD)
public @interface PublishMQ {
String destinyName() default "";
boolean skipNull() default true;
}
我有这个方面:
@Aspect
@Component
public class PublishMQAspect {
// ...
@After("@annotation(br.com.powertiss.utils.transaction.PublishMQ)")
public Object publishChangeToMQ(Object returnValue, PublishMQ publishMQ) throws Throwable {
// ...
我正在尝试在服务中使用它们:
@Service
public class OperatorService {
// ...
@PublishMQ(destinyName = "queues/Opera")
public Operator salve(Operadora operator) {
// ...
但我在启动时遇到了给定的异常:
java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut
PublishMQ 和 PublishMQAspect 与 OperatorService 位于单独的 jar 中,但我认为这应该不是问题。
我花了几个小时尝试了很多东西,但不明白为什么 AspectJ 会引发这个异常。你们能帮忙吗?谢谢。
【问题讨论】:
-
我猜这是因为 AspectJ 不知道切入点方法的第一个参数是什么。您需要以某种方式指示它是方法的返回值。
-
确保你导入的类是org.aspectj.lang.JoinPoint
-
另外,不应该是
@AfterReturning,因为你想要返回值?
标签: java spring-boot aop aspectj spring-aop