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

原文地址:https://www.cnblogs.com/gushendanying/p/5992644.html