当前位置: 首页 > 面试题库 >

“ @Transactional”应放在哪里服务层或DAO

充阳秋
2023-03-14
问题内容

首先,可能是我要问一些以前已经问过并回答过的问题,但我却无法找回搜索结果。一般而言(或到目前为止):)我们在服务层上定义事务注释,通常是Spring Hibernate Crud。

Controller-> Manager-> Dao-> Orm。

现在,我需要根据客户站点在域模型之间进行选择。假设客户端A使用我的域模型都很好,但是另一个客户端网站会给我一个Web服务而不是使用我们的域模型。

我应该替换哪一层。我认为必须是DAO,它将从Web服务获取我的数据并将其发送回去。即两个单独编写的DAO层,并根据情况插入。

我现在意识到,当我们放入@TransactionalService层时,我们一直在进行紧密的耦合(如果有这样的事情或者说没有松散的耦合)。这么多的大脑不会错,或者是(我对此表示怀疑)。

所以问题是“应该在哪里@Transactional放置服务层或DAO?” 服务层是否向下,我应该更换。


问题答案:

理想情况下,服务层(Manager)代表你的业务逻辑,因此应使用进行注释@Transactional

服务层可以调用不同的DAO来执行数据库操作。让我们假设一个服务方法中有3个DAO操作。如果你的第一个DAO操作失败,则其他两个操作可能仍会通过,并且最终将导致数据库状态不一致。注释服务层可以使你免于此类情况。



 类似资料:
  • 我的Spring应用程序分层为Bean、Service和dao。所有的@Transactional注释都在服务层中。 这是一个特定场景中的伪代码。 userBean.java UserDAOImpl.java 在我的save user测试用例中,update parent user操作在某些情况下可能会由于主键冲突而失败,这是意料之中的。 由于@Transactional注释是在service类中

  • 问题内容: 放置注释的最佳做法是什么?我应该注释接口方法还是实现? 问题答案: 好问题。我一直把它放在实现中。也许是因为它是实现细节,而不是抽象。 你可能希望不同的实现具有不同的事务行为。 El Guapo指出,除此之外,在接口上使用代理策略还可能引发更多问题。

  • 我怀疑Spring注释放在哪一层?以下是两种情况: > case:将放置在DAO层中 案例:将放置在服务层中? 我只使用Spring,而不是SpringMVC。

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

  • 问题内容: 来自代码标题的问题: 与 问题答案: 来自http://static.springsource.org/spring/docs/2.0.x/reference/transaction.html Spring团队的建议是,您只应使用注释对具体的类进行注释,而不是对接口进行注释。您当然可以将注释放置在接口(或接口方法)上,但这仅在您使用基于接口的代理时才能按预期使用。注解 未继承 的事实意

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