- 切面实现事务
- 在实现事务的时候也是在xml中编写代码来实现,因为要用到切面,所以我们要引入aop schema,引入的方法实在beans标签上写为:
- xmlns:aop=http://www.springframework.org/schema/aop
- 和
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
- 这样,aop就可以使用了
- 事务的产生肯定是和增删改查有关系的,我们以在hibernate中的事务为例,配数据源和配hibernate的工厂和hibernate模板类在这里就不多说了,如果有需要,可以看上一篇 --- 征服hibernate。
- 1.首先我们要声明一个事务管理器,来把sessionFactory工厂注入到事务管管理器中,代码为:
- <!-- 声明事务管理器 -->
- <bean id="hibernateTransactionManager"
- class="org.springframework.orm.hibernate3.HibernateTransactionManager">
- <!-- 绑定一个sessionFactory -->
- <property name="sessionFactory" ref="sessionFactory"></property>
- </bean>
- 之后,事务的发生地点是在哪呢?什么时候使用事务呢?这时就用到了切面,用一个切面把所有用到的事务都包含进来。
- 2.配置事务的通知
- <!-- 配置事务的通知 -->
- <tx:advice id="txadvice" transaction-manager="hibernateTransactionManager">
- <tx:attributes>
- <tx:method name="add*" isolation="DEFAULT" propagation="REQUIRED" />
- <tx:method name="insert*" isolation="DEFAULT" propagation="REQUIRED" />
- <tx:method name="find*" isolation="DEFAULT" propagation="REQUIRED" />
- <tx:method name="delete*" isolation="DEFAULT" propagation="REQUIRED" />
- </tx:attributes>
- </tx:advice>
- 事务的通知配置完了,事务在以上的配置中的某个方法中执行,那么,通知的配置是要有切面的,是哪个切面执行的呢?
- 3.配置一个切面
- <!-- 配置一个切面 -->
- <aop:config>
- <!-- advisor是切入点和通知的组合体 -->
- <aop:pointcut expression="execution(* cn.csdn.hr.hibernate.service.*.*(..))"
- id="txPointCut" />
- <aop:advisor advice-ref="txadvice" pointcut-ref="txPointCut" />
- </aop:config>
- 其中的切入点是通知实现的地方。
- 这样,我们的事务就配置好了
- 4.举例在删的时候使用事务
- public void delete(final Admin entity) {
- // 事务执行操作
- transactionTemplate.execute(new TransactionCallback() {
- @Override
- public Object doInTransaction(TransactionStatus stutus) {
- // TODO Auto-generated method stub
- try {
- adminDao.delete(entity);
- //不需要事务的提交
- } catch (Exception ex) {
- //只能回滚
- stutus.setRollbackOnly();
- }
- return null;
- }
- });
- }
切面实现spring事物管理
最新推荐文章于 2021-12-08 15:52:39 发布