gpt4 book ai didi

java - 现有注释的 AspectJ 表达式,注释之后但方法执行之前的切入点

转载 作者:行者123 更新时间:2023-12-01 17:24:06 25 4
gpt4 key购买 nike

这是现有的代码:

@Transactional
// <-- Want to Pointcut to here, after Transactional is done, before method execution
public String getUsername(int userId) {
...
}

尝试切入注释行,这是我迄今为止尝试过的:

@Around("@annotation(org.springframework.transaction.annotation.Transactional) " +
" && !target(org.springframework.transaction.interceptor.TransactionAspectSupport)")
public Object runQueryWithinTransaction(ProceedingJoinPointjp) throws Throwable {
...
}

还尝试将我的方面的顺序设置为 LowestPrecedence。尽管如此,我仍然看到我的方面在 Transactional 的“invokeWithinTransaction”方法之前被调用。尝试了“@After”,但它是在我的“getUsername”方法之后执行的。无缘无故地尝试了“@Before”,但这显然没有帮助。

我应该做什么?

最佳答案

通过在我的方面设置优先级来解决这个问题,如下所示:

@Aspect
@DeclarePrecedence("org.springframework.transaction.aspectj.AnnotationTransactionAspect, *")
public class MyAspect {
....
}

感谢@kriegaex,如果您不使用 AspectJ 和常规 Spring AOP,您应该尝试使用 @Ordered@Order 注释。 Spring事务上的@Order注解可以在@EnableTransactionManagement注解中设置,并为您自己的Aspect设置较低的优先级(或者根本不设置,因为最低优先级是默认的)。

关于java - 现有注释的 AspectJ 表达式,注释之后但方法执行之前的切入点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61236663/

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