代码之家  ›  专栏  ›  技术社区  ›  NiVeR

Spring中的事务方法

  •  1
  • NiVeR  · 技术社区  · 8 年前

    @Transactional 一切似乎都很顺利,没有问题。在尝试发现原因一段时间后,我最终会记得我实际上是从同一个类的内部调用我的事务方法,因此spring会立即忽略注释。在这些情况下,我碰巧在我的 @Controller 层,这似乎限制了代码的可重用性。关于这个问题,我有两个问题:

    • spring架构的哪个级别是 @控制器 , @Service 等等…)?
    2 回复  |  直到 8 年前
        1
  •  2
  •   asg    8 年前

    在spring架构的哪个级别上是@事务性最好的 放置(@控制器,@服务等)?

    根据我的经验,它最好放在服务层。您也可以将其添加到其他层中,但要保持一致。因为如果您在这个“@Transactional”注释的基础上添加更多注释,那么它的行为在整个应用程序中都应该是相同的。

    方法是否从类内部调用?

    您可以阅读Spring AOP是如何基于代理工作的。这是你的推荐信-

    Spring nested transactions

    @Transactional method calling another method without @Transactional anotation?

        2
  •  1
  •   Deadron    8 年前

    spring文档是解释这一点的很好的来源。最基本的情况是,当您将spring与事务性之类的注释一起使用时,当spring注入一个对象时,它实际上是在向该对象注入代理。这允许它拦截方法调用并执行管理事务之类的操作。当您自己实例化一个对象或调用同一类中的另一个实例方法时,您没有通过spring代理调用,它将无法管理该调用。

    至于事务注释应该放在哪里,这取决于您的代码库和对项目结构的看法。就我个人而言,我将它们放在调用堆栈中逻辑上合理的位置。