当前位置: 首页 > 知识库问答 >
问题:

事务性Spring注释放在哪里,在哪一层?

董霖
2023-03-14

我怀疑Spring注释放在哪一层?以下是两种情况:

>

  • case:将@Transactional放置在DAO层中

    案例:将@Transactional放置在服务层中?

    我只使用Spring,而不是SpringMVC。

  • 共有3个答案

    丁雅惠
    2023-03-14

    事务通常意味着您要将一些操作分组在一起,例如:

    void bankTransfer(String fromAccount, String toAccount, BigDecimal amount)
    {
    if (amount.compareTo(BigDecimal.ZERO) < 0) throw new RuntimeException("hack attempt");
    accountDao.deduct(fromAccount, amount);
    accountDao.add(toAccount, amount);
    }
    

    在这里,银行转账是有逻辑的。帐道没有逻辑,他们只是推演和添加。

    谭铭
    2023-03-14

    将其放在服务层,因为一个服务可能希望访问多个DAO方法,但这些方法仍将被视为同一业务事务的一部分。

    蒋培
    2023-03-14

    您希望您的服务是事务性的。如果您的DAO是事务性的,并且您在每个服务中调用不同的DAO,那么您将有多个事务,这不是您想要的。进行服务调用,这些方法中的所有DAO调用都将参与该方法的事务。

    有关更多详细信息,请参阅此链接

     类似资料:
    • 问题内容: hibernate注释应该放在哪里? 它是我的实例变量上方的线吗?还是在吸气剂之前?还是在二传手之前?还是真的不重要吗? 非常感谢 问题答案: 您可以将它们放在 野外 或 吸气剂上 。从《 Hibernate注释参考指南》中: 2.2.1。将POJO标记为持久实体 (…) 根据您是否注释字段或方法,Hibernate使用的访问类型将是字段或属性。EJB3规范要求您在将要访问的元素类型上

    • 问题内容: 休眠注释应该放在哪里? 它是我的实例变量上方的线吗?还是在吸气剂之前?还是在二传手之前?还是真的不重要吗? 非常感谢 问题答案: 您可以将它们放在 野外 或 吸气剂上 。从《 Hibernate注释参考指南》中: 2.2.1。将POJO标记为持久实体 (…) 根据您是否注释字段或方法,Hibernate使用的访问类型将是字段或属性。EJB3规范要求您在将要访问的元素类型上声明注释,即,

    • 问题内容: 你应该将放置在类和/或它们的方法中,还是更好地注释使用DAO对象调用的Service类?还是对两个“层”都进行注释是否有意义? 问题答案: 我认为交易属于服务层。这是了解工作单元和用例的人。如果你将多个DAO注入到一个服务中,而这些DAO需要在单个事务中一起工作,那么这是正确的答案。

    • 问题内容: 你应该将放置在DAO类和/或它们的方法中,还是更好地注释使用DAO对象调用的类?还是对两个“层”都进行注释是否有意义? 问题答案: 我认为交易属于服务层。这是了解工作单元和用例的人。如果您将多个DAO注入到一个服务中,而这些DAO需要在单个事务中一起工作,那么这是正确的答案。

    • 这个项目当然也有控制器调用的服务。因为它是一个Spring项目,所以用@Service注释对它们进行了注释。 当然,现在我想知道如何将这一点转移到雅加达世界。 用@stateless(我不需要@statelable)注释它的唯一方法是吗? 如果我使用@stateless,我必须把它放在实现类的接口上吗?或者,如果我把它放在接口上,它会被实现类继承吗?

    • 问题内容: 哪个更正确? 这(在方法上带有@Autowired注释)? 这(在属性上带有@Autowired注释)? @Autowired注释应该去哪里? 问题答案: 我个人更喜欢你的第一个选择(构造函数注入),因为该字段可以标记为final: 构造函数注入还允许你在单元测试中测试类,而无需依赖Spring的代码。 第二种选择最好写成: 使用字段注入,Spring将创建对象,然后更新标记为注入的字