Aspectj 建议顺序

Aspectj advice order

我正在使用 spring @Transctional aspectj 模式 加载时间编织.

我的方面使用与注释匹配的切点 @MyAnnotation

@Aspect
@Configurable
public class MyAspect{
 ....
    @Around("execution(* *(..)) && @annotation(annotation)")
    public Object around( ProceedingJoinPoint joinPoint, MyAnnotation annotation ) throws Throwable {
        ...
    }
}

,并在 aop.xml:

中声明
<aspectj>
    <weaver>
        <include within="mypackage..*"/>
    </weaver>
    <aspects>
        <aspect name="mypackage.MyAspect" />
    </aspects>
</aspectj>

我的用法:

    @Transactional
    @MyAnnotation
    private void method() {
      ...
    }

如何排序方面调用顺序以便 Transactional 方面在 MyAspect 之前被调用?

我需要它首先创建一个事务,然后在该事务中调用我的方面逻辑。

通过将 @DeclarePrecedence 添加到 aspect:

来解决它
@Aspect
@DeclarePrecedence("org.springframework.transaction.aspectj.*,*")
@Configurable
public class MyAspect

处理 @Transactional 的 spring 方面是 org.springframework.transaction.aspectj.AnnotationTransactionAspect,但为了将来重命名的安全起见,我使用了 org.springframework.transaction.aspectj.*.