xml
transactionproxyfactorybean
Advice里面的属性
这里因为只需要对一个切入点进行增强,所以用advisor就行了,表示对切入点pointcut1上使用txAdvice 这个增强
配置切面,advisor 一个切入点,一个通知
aspect 包含多个切入点,多个通知的
AccountService+
表示是它的子类
配置事务管理器和事务的通知
这里name 属性同样可以使用通配符,然后还有其它的事务相关的属性
AspectJ测试类
aspectj jar包依赖,spring-aspects,spring整合aspectj使用的
3、使用XML配置声明式事务 基于tx/aop
配置以及使用方式:
使用的时候,因为accountService在生成对象的过程中,就会被增强,生成的对象就是增强后的代理对象,所以直接使用即可
这种不常用,因为要对每个要代理的目标类(业务类)生成一个代理对象,去配置 目标方法、这些事务的传播行为等等,这样维护起来显然是不行的
2、使用XML配置声明式事务(原始方式)
222222222222222222222222222
11111111111111111111111
11111111111111111111111111
11111111111111111111111111
123456
AspectJ增强事务
xml配置的事务
声明式事物管理方式二:基于AspectJ的XML方式
实际开发中,不经常使用第一种方式(TransactionProxyFactoryBean代理类),因为这种方式需要为每一个需要事务管理的Service配置一个TransactionProxyFactoryBean,开发和维护带来不便。
【1】引入AspectJ的jar包和整合AspectJ的包。
AspectJ简介:Spring在开发AOP时,为了简化编程而建立的。(AspectJ实际是开源的、第三方的AOP开发框架,Spring为简化自身开发,就引入了AspectJ的包)
【2】配置事物管理器,并注入数据源dataSource。
【3】配置事物的通知(事物的增强,通过<tx:advice id="" transaction-manager="事物管理器Id"></tx:advice>,这个标签中需要配置事物相关的一些属性<tx:attributes></tx:attributes>,该属性的作用就是哪些方法执行事务,<tx:method="方法名"></tx:method>如果多个方法可以用英文单词*,该标签中还定义了事物的传播行为、隔离级别、超时信息、只读等等属性)
事物增强的一些属性信息。
【4】配置AOP的切面(通过<aop:config></aop:config>,在<aop:config>下需要配置切入点<aop:point-cut expression="" id=""></aop:point-cut>,其中表达式最前面的*表示方法返回值为任意的,+号表示及其子类,.*表示任意的方法,(..)表示任意的参数,接下来需要配置切面其中<aop:aspect>代表多个切入点,多个通知,而<aop:advisor>是一个切入点,一个通知的。这里使用它即可。因为现在只有一个增强即事物增强,这样AccountService即其子类的任意方法都会事物增强了)
该声明式事务管理就不需要再注入代理了,这种方式属于自动代理,自动代理一般是基于BeanPostProcessor这个类,也就是类生成过程中(Serivice)本身就是一个代理。
事务的通知中,可以增强的具体内容有以下几点:
事务传播行为;
事务隔离级别;
只读;
发生哪些异常回滚;
发生哪些异常不回滚
声明式事务管理中,基于AspectJ的XML方式实现:
默认需要配置 org.springframeword.jdbc.datasource.DataSourceTransactionManager 外;
还需要配置事务的通知(即事务的增强):
<tx:advice> </tx:advice>
其中所涉及的配置有
<tx:method name ="transfer" propagation = "REQUIRED">
这是事务的传播机制;
注意: 基于AspectJ的事务管理,其Service接口在被实现过程中便自动进行了代理,起到了增强作用,不需要再进行其它的操作使其增强;
编程式的事务管理:
在实际应用中很少使用,
通过TransactionTemplate 手动管理事务
声明式的事务管理:
开发中推荐使用(代码侵入性最小)
spring的声明式事务是通过AOP实现的
配置文件
事务属性
基于AspectJ的XML方式
配置文件
配置事务管理器、配置事务的通知(事务的增强)、配置切面
使用xml配置声明式事务 基于tx/aop
使用xml配置声明式事务一
使用原始的TransactionProxyFactoryBean
使用 原始 TransactionProxyFactoryBean 的方式配置
基于AspectJ的xml方式中的配置项