Spring事务配置给service 还是 dao?

hardycheng 2010-08-11 03:33:59
最近学习spring ,也做了一些例子,

但是有个困惑就是,采用 spring的事务管理的时候,这样配置:


<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!-- 配置事务的传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="modify*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>
<!-- 那些类的哪些方法参与事务 -->
<aop:config>
<aop:pointcut id="allManagerMethod" expression="execution(* my.idao.*.*.*(..))" />
<aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice" />
</aop:config>

<bean id="sessionAdvice" class="my.filter.FlexSessionInterceptor" />

<!-- 配置自动代理 -->
<bean id="beanNameAutoProxyCreator"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>formDesignerService</value>
</list>
</property>
<property name="interceptorNames">
<value>sessionAdvice</value>
</property>
</bean>


expression="execution(* my.idao.*.*.*(..)) 对于这一块的配置还是不太明白,因为 我觉得事务开启的话也是针对业务的,而不是dao,
但是我找了许多例子,几乎都是这样配置的,有些虽然是把 service的方法配置成事务,但是没有dao接口,也就是在service的方法下面把所有的操作都包含了,包括对数据库的操作,所以很困惑---到底应该是针对业务来配置 事务 ,还是 针对 dao来配置事务?
...全文
549 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
AslenG 2012-10-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

service,举个例子,某service方法里包含了两个插入数据库操作,这两个操作是调用了dao层的方法,这样的话如果是给dao层加事务,当第二个操作出错时,第一个操作能回滚么?这样的例子很多的。
[/Quote]

+10086
未来纪元 2012-06-14
  • 打赏
  • 举报
回复
事务配置在业务逻辑方法,配置在service
hardycheng 2010-08-12
  • 打赏
  • 举报
回复
谢谢大家
sxb372435741 2010-08-11
  • 打赏
  • 举报
回复
service
大白丁 2010-08-11
  • 打赏
  • 举报
回复
事务配置service中方法 ,因为service中是实现业务每个业务是一个整体,不能只执行一半
比如service中有一个方法转账 transferofaccount()现在从A卡转账到B卡
transferofaccount(){
dao.update(A);//A卡减200
dao.update(B);//B卡加200
}
那么这必须用事务控制否则中途出现问题A减200而B没有加200
hardycheng 2010-08-11
  • 打赏
  • 举报
回复
但是有个问题 就是 dao里面的方法可以定义为 addUser()
这样的名称

但是service里面就不行,那么这个时候 配置是不是就不能用这种方式了? 只能单个的把方法配置了或者用注解方式进行管理?

SuperNovice 2010-08-11
  • 打赏
  • 举报
回复
service,举个例子,某service方法里包含了两个插入数据库操作,这两个操作是调用了dao层的方法,这样的话如果是给dao层加事务,当第二个操作出错时,第一个操作能回滚么?这样的例子很多的。
  • 打赏
  • 举报
回复
这要看你的事务边界在哪里了。一般来说,事务边界不会位于 DAO 上,会被定义在一个业务逻辑方法之上,因为一个业务逻辑方法会调用多个 DAO 的方法而完成一个事务。
eimhee 2010-08-11
  • 打赏
  • 举报
回复
我觉得事务处理应该写在service中, 而不应该写在dao 当中, 用service调用dao,
可能你那个系统没有写service, 直接就用dao 了
njskater 2010-08-11
  • 打赏
  • 举报
回复
我觉得应该给service
亲努力啊 2010-08-11
  • 打赏
  • 举报
回复
service

67,542

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧