spring声明式事务控制的使用

事务的通知使用在业务层中,用spring AOP实现声明式事务控制,即动态的将事务相关的代码添加到业务层的所有代码中。声明式事务控制要和AOP的要求结合起来比较好记。

下面是配置声明式事务控制的思路:
1.声明式事务控制依靠AOP完成,因此,需要配置一个aop:config,而中间只需要一个标签:


	

其中,切入点表达式就通配所有业务层的方法
按照之前AOP的相关知识,AOP的配置应该包含通知,切入点。这里有了切入点,那么advice-ref所引用的就是通知了

2.通知使用标签:tx:advice



	
		
		
		
		
		
		
		
		
	

1)上面的配置中,id是该通知的标识,用在之前advice-ref的引用中,这里补全上面的aop:config



	

2)先不管transaction-manager属性所需要的值,先来看标签,这个标签在tx:attributes标签下,表示传播行为。例如:


表示增强insert开头的所有方法,propagation="REQUIRED"表示:在执行该方法的时候,如果没有事务,就创建一个事务,如果有事务,就加入进去。多用于赠删改操作;
propagation="SUPPORT"表示:方法执行时,如果当前有事务,就加入进去,如果没有事务就以非事务的方式执行,用于查找操作

  1. transaction-manager是事务管理所需要的一个事务管理类。很好理解,在AOP中,通知应该包含目标对象和增强方法,transaction-manager需要的属性就是目标对象,而增强方法是标签,那么目标对象(增强方法所在类)就需要我们提供

3.事务管理器类,即上面说到的AOP的目标对象,提供增强方法的类。这个类当然不用我们自己写,而是使用jdbc的事务控制类org.springframework.jdbc.datasource.DataSourceTransactionManager
既然是jdbc关于数据库的事务控制类,那么就肯定需要数据源的配置了。一般项目配置到这个地方的时候,都已经配置好了dao层,即配置过了数据源信息,直接引用即可


		
		
	

4.总结:一共需要三类的标签——事务管理器的bean,事务的通知,AOP配置
本文的思路是从AOP到事务的通知,再到事务管理器的bean。如果熟练的话可以直接从事务管理器到事务通知再到AOP配置。
下面附我自己的完整配置:






	
		
		
	



	
		
		
		
		
		
		
		
		
	




	




你可能感兴趣的:(ssm,spring)