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

      通过Spring AOP 实现Spring声明式事务管理;

      Spring支持编程式事务管理声明式事务管理两种方式。

    一种是注解事务管理 一种是XML事务管理。

    注解事务管理代码如下:

     1 //@Service("myNewsService")
     2 @Transactional
     3 @Service
     4 @Scope("prototype")
     5 public class NewsServiceImpl implements NewsService {
     6 
     7     //Autowired和Qualifier 属于spring的注解,
     8     
     9     
    10     //jdk自带注解resource可以替代Autowired
    11     /*
    12      * 用resource的好处:
    13      * 1. 代码与spring 解耦,不依赖于spring
    14      * 2. 代码中没有spring的存在,可以随时切换任意一套类似spring的框架
    15      */
    16     @Autowired
    17     //@Qualifier("myNewsDao")
    18     //@Resource(name="myNewsDao") 
    19     private NewsDao nd;
    20     
    21 
    22     @Override
    23     @Transactional(readOnly=true)
    24     public List showAllNews() {
    25         //可以增加一个业务逻辑,比如:把文章的内容进行截取为20字符
    26         //通过DAO获取数据
    27         List<News> allNewList = nd.showAllNews();
    28         //在return 之间,可以进行各种业务逻辑操作
    29         
    30         return allNewList;
    31     }
    32 
    33     @Override
    34     public String findNews() {
    35         // TODO Auto-generated method stub
    36         return null;
    37     }
    38 
    39     @Override
    40     @Transactional
        (使用spring的Transactional注解用于通知spring需要加入事物的方法。)
    41 public String deleteSingleNews(Integer id) { 42 //需要做以下判断,例如有没有权限删除,又或者判断下面是否有级联子子记录 43 44 //当可以删除时,调用DAO给直接删除 45 String returnValue = "deleteFailed"; 46 returnValue = nd.deleteSingleNews(id); 47 // TODO Auto-generated method stub 48 return returnValue; 49 } 50 51 }

    XML事物管理的代码:

     1 </bean>
     2 
     3 
     4 <bean class="org.springframework.orm.hibernate5.HibernateTransactionManager" id="transactionManager">
     5 
     6 <property ref="sessionFactory" name="sessionFactory"/>
     7 
     8 </bean>
     9 
    10 
    11 <tx:advice id="txAdvice" transaction-manager="transactionManager">
    12 
    13 
    14 <tx:attributes>
    15 
    16 </tx:advice>
    17 
    18 
    19 <aop:config>
    20 
    21 <aop:pointcut id="interceptorPointCuts" expression="execution(* news.dao.*.*(..))"/>
    22 
    23 <aop:advisor pointcut-ref="interceptorPointCuts" advice-ref="txAdvice"/>
    24 
    25 </aop:config>
    26 
    27 </beans>

    我们使用<tx:advice/>标签,这将创建我们定义了一个切入点匹配所有我们想做成事务,并引用其中的事务通知方法的事务并同时处理建议。

    如果一个方法的名字已被列入事务配置,然后创建意见,将调用该方法之前开始交易。

    目标方法将在一个try/ catch块被执行。

    如果方法正常完成,AOP的建议提交事务成功,否则执行回滚。

  • 相关阅读:
    PHP设计模式——单例模式
    PHP设计模式——工厂模式
    远程备份脚本
    支持UEFI和LEGACY的多系统安装U盘
    minikube部署kubernetes学习环境
    获取kubernetes镜像
    Jenkins常用插件
    不想用ubuntu了,换个系统manjaro
    openstack stein部署手册 10. 创建实例
    openstack stein部署手册 10. horzion
  • 原文地址:https://www.cnblogs.com/gushendanying/p/5992644.html
Copyright © 2011-2022 走看看