我有一个交易服务类:
@Service
@Transactional(...)
public class MyService() {
public void myFunc() {
// some code
}
}
还有以下几个方面:
@Aspect
public class MyAspect() {
@AfterReturning(value = "execution(...") // pointcut matching myFunc()'s signature
public void doSomethingAfterMyFunc() {
// some code
}
}
我遇到的问题是,在输入@AfterReturning建议时,从执行myFunc()创建的事务尚未提交,因此该通知共享相同的事务。从我所看到的,这种行为是可以预期的,但就我的目的而言,我需要相反的 - 有没有办法在输入建议之前提交myFunc()的事务?
提前致谢!
答案 0 :(得分:2)
由于 <xs:simpleType name="AConstantHere">
<xs:restriction base="xs:string">
<xs:enumeration value="CONSTANT_VALUE_HERE"/>
</xs:restriction>
</xs:simpleType>
看点,这种情况正在发生,因此您的代码中有2个方面,因此您必须按照https://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/aop.html#aop-ataspectj-advice-ordering
@Transactional
在您的代码中,您可以设置自己的方面Order
的顺序,如下所示:
MyAspect
将其顺序指定为1,因为规则是:
在离开连接点的路上,具有最高Order值的建议 先被执行。
@Aspect
@Order(1)
public class MyAspect() {
//your code here
}
Aspect将在您之前执行,因此@Transactional
将被提交,然后myFunc
将被执行。