• 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的建议提交事务成功,否则执行回滚。

  • 相关阅读:
    Visual Studio 2019 使用 Web Deploy 发布远程站点到IIS服务器
    postman下载地址
    ASP.NET Core开发-Docker部署运行
    C# ffmpeg 视频处理格式转换具体案例
    C# ffmpeg 视频处理格式转换和添加水印
    C# ffmpeg 视频处理
    Tomcat 安装与配置
    Maven 快速入门
    Jenkins 快速搭建
    Google SRE 读书笔记 扒一扒SRE用的那些工具
  • 原文地址:https://www.cnblogs.com/gushendanying/p/5992644.html
Copyright © 2020-2023  润新知