gpt4 book ai didi

java - 在 AspectJ + SpringBoot 中使用 @After(@annotation) 切入点出现异常

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

各位程序员大家好。

我正在开发一个 SpringBoot Rest API,并且我正在尝试使用一个方面,该方面在执行带有自定义注释的方法后执行一些操作。

所以我有这个自定义注释:

@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 会引发这个异常。你们能帮忙吗?谢谢。

最佳答案

在回答之前,让我建设性地批评一下你提问的方式:问题不清楚。为什么提供不连贯的代码片段而不是完整的类或方法?具体来说,您不会在方面建议中显示您实际想要使用哪些方法参数。所以现在我必须猜测(我不喜欢这样,因为现在我的工作量比必要的多了 4 倍,见下文)。我建议您了解什么是MCVE是 - 4k 信誉用户应该已经知道 - 并尝试在将来提出更好的问题。

<小时/>

除了始终隐式可用的 JoinPoint 参数之外,您不能使用切入点或结果中未出现的通知方法参数。您应该阅读一些 AspectJ 文档,以便了解有关切入点和建议语法的更多信息。

你有一个选择:要么在你的建议方法中不需要返回值和注释......

@After("@annotation(br.com.powertiss.utils.transaction.PublishMQ)")
public Object publishChangeToMQ(JoinPoint thisJoinPoint) throws Throwable {

...或者您只需要注释值...

@After("@annotation(publishMQ)")
public Object publishChangeToMQ(JoinPoint thisJoinPoint, PublishMQ publishMQ) throws Throwable {

...或者您只需要返回值...

@AfterReturning(pointcut = "@annotation(br.com.powertiss.utils.transaction.PublishMQ)", returning = "returnValue")
public Object publishChangeToMQ(JoinPoint thisJoinPoint, Object returnValue) throws Throwable {

...或者您需要返回值和注释...

@AfterReturning(pointcut = "@annotation(publishMQ)", returning = "returnValue")
public Object publishChangeToMQ(JoinPoint thisJoinPoint, PublishMQ publishMQ, Object returnValue) throws Throwable {

关于java - 在 AspectJ + SpringBoot 中使用 @After(@annotation) 切入点出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57274028/

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