Spring配置事务在DAO层和Service层

Spring配置事务在DAO层和Service层

分类: spring 3065人阅读 评论(0) 收藏 举报
Spring通过AOP实现声明式事务管理。通常通过TransactionProxyFactoryBean设置Spring事务代理。我们需要一个目标对象包装在事务代理中。这个目标对象一般是一个普通Java对象的bean。当我们定义TransactionProxyFactoryBean时,必须提供一个相关的 PlatformTransactionManager的引用和事务属性。 事务属性含有上面描述的事务定义。
PlatformTransactionManager:
HibernateTransactionManager需要一个SessionFactory的引用
JtaTransactionManager
一.把事务放置在了DAO层:
<!—hibernateTransactionManager-->
<bean id="transactionManager"
       class="org.springframework.orm.hibernate3.HibernateTransactionManager">
       <property name="sessionFactory">
              <ref local="sessionFactory" />
       </property>
</bean>
<!—DAO层接口实现-->
<bean id="companyDAOTarget"
       class="com.vstsoft.querycompany.dao.impl.CompanyDAOImpl">
       <property name="sessionFactory">
              <ref local="sessionFactory" />
       </property>
</bean>
<!—spring对DAO层的事务代理-->
<bean id="companyDAOProxy"
       class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
       <property name="transactionManager">
              <ref bean="transactionManager" />
       </property>
       <property name="target">
              <ref local="companyDAOTarget" />
       </property>
       <property name="transactionAttributes">
              <props>
              <prop key="insert*">PROPAGATION_REQUIRED</prop>
              <prop key="delete*">PROPAGATION_REQUIRED</prop>
              <prop key="find*">
              PROPAGATION_REQUIRED,readOnly
              </prop>
              </props>
       </property>
</bean>
<!—业务层接口实现,把DAO注入到Service里面-->
<bean name="companyManageTarget"
       class="com.vstsoft.querycompany.service.impl.CompanyManageTarget">
       <property name="companyDAO">
              <ref bean="companyDAOProxy" />
       </property>
</bean>
<!—spring对Service层的代理-->
<bean id="companyManageProxy"
       class="org.springframework.aop.framework.ProxyFactoryBean">
       <property name="proxyInterfaces">
              <value>com.vstsoft.querycompany.service.CompanyManage</value>
       </property>
       <property name="target">
              <ref bean="companyManageTarget" />
       </property>
</bean>
<!—配置struts访问,把service层注入到action里面-->
<bean name="/company"
       class="com.vstsoft.querycompany.web.action.CompanyAction" singleton="false">
       <property name="companyManage">
              <ref local="companyManageProxy" />
       </property>
</bean>
二.把事务放置在了Service层:
<!—jtaTransactionManager-->
<bean id="jtaTransactionManager"
       class="org.springframework.transaction.jta.JtaTransactionManager" />
<!—DAO层接口实现-->
<bean id="companyDAOTarget"
       class="com.vstsoft.querycompany.dao.impl.CompanyDAOImpl">
       <property name="sessionFactory">
              <ref local="sessionFactory" />
       </property>
</bean>
<!—spring对DAO层的代理-->
<bean id="companyDAOProxy"
       class="org.springframework.aop.framework.ProxyFactoryBean">
       <property name="proxyInterfaces">
              <value>com.vstsoft.querycompany.dao.CompanyDAO</value>
       </property>
       <property name="target">
              <ref bean="companyDAOTarget" />
       </property>
</bean>
<!—业务层接口实现,把DAO注入到Service里面-->
<bean name="companyManageTarget"
       class="com.vstsoft.querycompany.service.impl.CompanyManageTarget">
       <property name="companyDAO">
              <ref bean="companyDAOProxy" />
       </property>
</bean>
<!—spring代理业务层的事务管理-->
<bean id="companyManageProxy"
       class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
       <property name="transactionManager">
              <ref local="jtaTransactionManager" />
       </property>
       <property name="transactionAttributes">
              <props>
                     <prop key="set*">PROPAGATION_REQUIRED</prop>
                     <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
              </props>
       </property>
       <property name="target">
              <ref bean="companyManageTarget" />
       </property>
</bean>
<!—配置struts访问,把service层注入到action里面-->
<bean name="/company"
       class="com.vstsoft.querycompany.web.action.CompanyAction" singleton="false">
       <property name="companyManage">
              <ref local="companyManageProxy" />
       </property>
</bean>
在service层的接口实现CompanyManageImpl里面有个setData方法:按顺序执行数据查询,数据删除,数据插入数据库行为,如果哪一步出异常(运行时异常),事务回滚,只有所有行为都没成功,事务提交。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值