对AOP的应用
1 事务管理API
主要用到两个接口:事务管理器接口,事务定义接口
(1)PlatFormTransaction事务管理器接口
用于完成事务的提交,回滚及获取事务的状态信息
API文档:Spring框架解压目录下的docs/javadoc-api/index.html
该接口常用的两个实现类
DataSourceTransactionManager:使用JDBC或iBatis进行持久化数据时使用
HibernateTransactionManager:使用Hibernate进行持久化数据时使用
Spring的回滚方式
发生运行时异常回滚,发生受查异常提交。但受查异常可手动设置。
(2)TransactionDefinition事务定义接口
定义了事务描述相关的三类常量:事务隔离级别,事务传播行为,事务默认超时时限,及对他们的操作。
2 使用事务代理工厂管理事务
(1) 导入jar
aop联盟和Spring对aop实现的jar包
(2) 事务配置
注册事务管理器(注册实现类)
DataSourceTransactionManager
(3)生成事务代理
抛出异常JVM能知道,为红色,捕获异常JVM不知道,调试为绿色
相当于将service里的一个方法作为事务,该方法调dao层进行多表操作,保证对这些表的操作同时成功或失败
<bean id="serviceProxy" class="...TransactionProxyFactoryBean">
<property name="transactionManager" ref="事务管理器"/>(相当于切面)
<property name="target" ref="service"/>
<property name="transactionAttributes">
<props>//集合属性
<prop key="事务内的所有方法">事务隔离级别ISOLATION_DEFAULT,传播行为PROPAGATION_REQUIRED,-自定义的异常</prop>//把多个方法绑定在一个事务中,相当于将Service里的一个方法作为整体
...其他事务
</props>
</property>
</bean>
-异常回滚,+异常提交
3使用Spring事务注解管理事务
(1)注册事务管理器(注册实现类)
(2)增加事务约束
(3)配置
<tx:annotation-driven transaction-manager="事务管理器"/>
(4)在service事务方法上加注解
@Transaction(isolation=Isolation,propagation=Propagation.REQUIRED)
//指定发生哪个异常时回滚
@Transaction(isolation=Isolation,propagation=Propagation.REQUIRED,rollbackFor=StockException.class)
4 使用AspectJ的AOP配置管理事务(重点)
(1)导jar
(2)配置
事务通知
<tx:advice id="txAdvice" transaction-manager="事务管理器">
<tx:attributes>
<!-- 指定在连接点方法上应用的事务属性 -->
<tx:method name="service方法" isolation=“”/>
</tx:attributes>
</tx:advice>
aop配置
<aop:config>
<!-- 指定切入点 -->
<aop:pointcut expression="execution(* *..service.*.*(..))" id="pointcut"/> //service下类的所有方法
<aop:advisor advice-ref="txAdvice" point-ref="pointcut"/>
</aop:config>
配expression决定连接点是否可作为切入点