zoukankan      html  css  js  c++  java
  • Spring声明式事务管理

    1.在Spring的applicationContext.xml中配置事务管理者

    PS:具体的说明请看代码中的注释

    Xml代码:

    复制代码
        <!-- 声明式事务管理的配置 -->
        <!-- 添加事务管理者的bean -->    
        <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
            <!-- 为事务管理者类中的sessionFactory属性注入一个具体的实例 -->
            <property name="sessionFactory" ref="sessionFactory"></property>
        </bean>
        
        <!-- 通知的配置 -->    
        <tx:advice id="txAdvice" transaction-manager="transactionManager">
            <tx:attributes>
                <!-- 指定需要开启并提交事务的方法 -->
                <tx:method name="add*" propagation="REQUIRED" />
                <tx:method name="del*" propagation="REQUIRED" />
                <tx:method name="mod*" propagation="REQUIRED" />
                <!-- 指定以上方法除外的方法是只读的    read-only -->
                <tx:method name="*" propagation="REQUIRED" read-only="true" />
            </tx:attributes>
        </tx:advice>
        
        <!-- 切面的配置(aop原理这里不多说,我的博文中有详细文章) -->
        <aop:config>
            
            <!-- 声明一个切入点 -->
            <aop:pointcut id="interceptorPointCuts" expression="execution(* app.dao.*.*(..))" />
            
            <!-- 引用一个通知并且同时引用一个需要执行的切入点 -->
            <aop:advisor advice-ref="txAdvice" pointcut-ref="interceptorPointCuts" />
        </aop:config>
    复制代码

    1_1.运行项目

    程序报错如下:

    org.springframework.beans.factory.BeanDefinitionStoreException

    原因是缺少jar包{org.aopalliance}

    Caused by: java.lang.ClassNotFoundException: org.aopalliance.intercept.MethodInterceptor

    1_2.添加jar包,将这4个jar包导入到项目的lib目录下

                         

    2.使用Spring提供的事务注解

    @Transactional [使用事务注解,告诉Spring当前位类中需要事务的开启和提交,注解代码位置可以出现在类定义的前面或者方法上面]

    @Transactional(readOnly=true) [使用事务注解,告诉Spring当前方法不需用到事务,只读]

    类定义的前面声明事务注解,个别不需用到事务的方法设置为只读

    Java代码:

    复制代码
    @Transactional  
    public class BcServiceImpl implements BcService {
        @Autowired
        private BcDao bd;
        
        @Override
        @Transactional(readOnly=true)  
        public List<BookCard> getAllBc() {
            // TODO Auto-generated method stub
            return bd.getAllBc();
        }
    
        @Override
        public String delSingleBc(Integer cid) {
            // TODO Auto-generated method stub
            return bd.delSingleBc(cid);
        }
    
    }
    复制代码

    只在方法上声明事务注解,即每个方法上都进行事务注解的声明

    Java代码:

    复制代码
    public class BcServiceImpl implements BcService {
        @Autowired
        private BcDao bd;
        
        @Override
        @Transactional(readOnly=true)  
        public List<BookCard> getAllBc() {
            // TODO Auto-generated method stub
            return bd.getAllBc();
        }
    
        @Override
        @Transactional
        public String delSingleBc(Integer cid) {
            // TODO Auto-generated method stub
            return bd.delSingleBc(cid);
        }
    
    }
    复制代码

    2_1.在Spring的applicationContext.xml中,添加一个驱动的bean,事务管理者

    【PS:添加事务驱动者的bean后,通知的配置{<tx:advice />}和切面的配置{<aop:config />}都删除掉】

    Xml代码:

    复制代码
        
        <!-- 声明式事务管理的配置 -->
        <!-- 添加事务管理者的bean -->    
        <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
            <!-- 为事务管理者类中的sessionFactory属性注入一个具体的实例 -->
            <property name="sessionFactory" ref="sessionFactory"></property>
        </bean>
        
        <!-- 添加一个驱动的bean,事务管理者 -->
        <tx:annotation-driven transaction-manager="transactionManager"/>
        
    复制代码
  • 相关阅读:
    你所选择的栏目与当前模型不相符请选择白色的选
    DEDECMS首页调用图片集里的多张图片
    dedecms内容页调用图片集文档的图集图片
    Sublime Text 使用介绍、全套快捷键及插件推荐
    基于Nutch+Hadoop+Hbase+ElasticSearch的网络爬虫及搜索引擎
    nutch
    ant安装
    selenium经过WebDriverWait实现ajax测试
    查看当前android设备已安装的第三方包
    批处理学习总结之常用符号
  • 原文地址:https://www.cnblogs.com/guoxingbo/p/5993229.html
Copyright © 2011-2022 走看看