我们有一个基于Spring的应用程序,带有@Transactional注解的服务层。我们需要之前和之后,原因如下一些事务方法有代码的运行:在@Transactional方法之前和之后执行代码
- 我们需要同步访问基于密钥的方法。该线程需要在事务开始之前阻塞。
- 如果事务成功,我们需要在队列上发布消息。
的选项似乎是:
- 创建类似的方法,可以在同步块运行@Transactional方法和检查返回然后发布消息的服务类(需要由于AOP代理问题导致的单独课程)。服务呼叫服务,不好,感觉像一个解决办法。
- 编写一个方面来环绕可以执行同步和消息发布的@Transactional AOP。可能会工作,但宁愿避免AOP。
- 将事务下移到域图层。由于领域方法在不同的工作流程中被重复使用的方式,因此当前的实现不太可取或可能甚至是可行的。
- 在服务方法中手工编写交易并废止@Transactional。
我想这是一个相当普遍的要求。可能我错过了一个选项5,这是显而易见的选项!
同意这一点,我不明白为什么人们会想在这种情况下避免AOP。这是最干净的方法。 –
这是要走的路,毕竟@Transactional也使用AOP。所以连接另一个方面将是最好和最简单的事情。 –
绝对使用AOP。正如@Sean指出的那样,您已经在使用@Transactional来使用Spring AOP,并且Spring特别支持[定位注释的切入点表达式](http://static.springsource.org/spring/docs/3.1.x/spring-framework -reference/html/aop.html#aop-pointcuts-designators),所以你可以告诉它在没有额外工作的情况下每个@Transactional方法运行。 –