在服务层自动装配 sessionFactory
Autowiring sessionFactory in service layer
目前我正在我的服务中自动装配 sessionfactory class 只是为了事务管理。我正在服务中创建(休眠)会话并基于 DAO 层的响应,执行事务 commit/rollback。
我的业务逻辑要求我在单个事务中更新两个以上的数据库表。
从设计的角度来看,我对在服务层自动装配 sessionFactory 持怀疑态度。
还有其他选择吗?
谢谢
服务层的事务管理是个不错的设计。如果您不想为了关注点分离而在服务层自动装配会话工厂,您可以
- 将事务管理逻辑明确委托给您自己的自定义事务管理class。或者
- 使用AOP和使用annotations/XML,spring提供了很好的支持。
不是这样。 Spring MVC 有一个设计结构。你必须遵守这一点。
在服务层中嵌入 DAO 层是不正确的做法。
DAO层负责处理Transaction相关的事情。
服务层将像抽象一样工作。有什么必要把它们包成一个?
总的来说,我同意其他人的说法,即事务通常在服务级别启动(当然取决于您需要的粒度)。
然而,与此同时,我也开始将 @Transactional(propagation = Propagation.MANDATORY) 添加到我的 DAO 层(以及其他不允许启动事务但需要现有事务的层),因为它太多了更容易检测到您忘记在调用方(例如服务)中启动事务的错误。如果您的 DAO 被注释为强制传播,您将收到一个异常,说明调用该方法时没有活动事务。
我还有一个集成测试,我在其中检查所有 bean(bean post 处理器)是否有此注释,如果不属于的 bean 中存在 @Transactional 注释且传播不是 Mandatory,则会失败服务层。这样我可以确保我们不会在错误的层上开始交易。
最初来自Where does the @Transactional annotation belong?
目前我正在我的服务中自动装配 sessionfactory class 只是为了事务管理。我正在服务中创建(休眠)会话并基于 DAO 层的响应,执行事务 commit/rollback。
我的业务逻辑要求我在单个事务中更新两个以上的数据库表。
从设计的角度来看,我对在服务层自动装配 sessionFactory 持怀疑态度。
还有其他选择吗?
谢谢
服务层的事务管理是个不错的设计。如果您不想为了关注点分离而在服务层自动装配会话工厂,您可以
- 将事务管理逻辑明确委托给您自己的自定义事务管理class。或者
- 使用AOP和使用annotations/XML,spring提供了很好的支持。
不是这样。 Spring MVC 有一个设计结构。你必须遵守这一点。 在服务层中嵌入 DAO 层是不正确的做法。 DAO层负责处理Transaction相关的事情。 服务层将像抽象一样工作。有什么必要把它们包成一个?
总的来说,我同意其他人的说法,即事务通常在服务级别启动(当然取决于您需要的粒度)。
然而,与此同时,我也开始将 @Transactional(propagation = Propagation.MANDATORY) 添加到我的 DAO 层(以及其他不允许启动事务但需要现有事务的层),因为它太多了更容易检测到您忘记在调用方(例如服务)中启动事务的错误。如果您的 DAO 被注释为强制传播,您将收到一个异常,说明调用该方法时没有活动事务。
我还有一个集成测试,我在其中检查所有 bean(bean post 处理器)是否有此注释,如果不属于的 bean 中存在 @Transactional 注释且传播不是 Mandatory,则会失败服务层。这样我可以确保我们不会在错误的层上开始交易。
最初来自Where does the @Transactional annotation belong?