日期:2014-05-17  浏览次数:20989 次

大话Spring事务之AspectJ

Spring 提供了事务的两种管理方式, 一种是编程式的,还有一种是声明式的.个人喜欢声明式的,灵活,简单.

?

先谈谈什么是事务,事务由哪些特性.事务时一组原子的操作,要么全部执行成功,或者在执行过程中只要有某一步执行失败,则整个事务必须回退(回滚). 事务的特性有原子性,一致性,隔离性和持久性.

?

好了其他的不必说了,直奔主题. Spring管理事务的时候默认的是使用的java的动态代理机制,当然还可以使用cglib, 需要加入cglib类包.Spring还封装了AspectJ的事务管理,是面向aop的一种管理机制, 在这里我先了解一下相关的几个概念: pointcut, advice, sdvisor.

?

一: 通知(advice)

?? 当程序处理到某一点的时候需要执行的代码块或者调用的方法叫做advice.

二:?切入点(的集合)?pointcut

?? 调用特定代码块的切入点, 就是上面提到的某一点.呵呵

三: advisor:

???? 通知和切入点的装配器.

?

具体配置如下:

<bean id="transactionManager" class="org.springframework.aop.hibernate3.HibernateTransactionManager">
<property name="sessionFacotry" ref="sessionFactory"></property>
</bean>

?

<tx:advice id="txAdvice" transaction-manager="transactionMananger">
<tx:attributes>
   <tx:method name="save*"/>
   <tx:method name="*" readonly="true"/>
</tx:atttributes>
</tx:advice>

?

声明一个事务管理器, 并且配置一个aop的通知, 这个通知适用于此事务管理器,只要是对于save打头的方法都会启用事务管理.但是基于哪些save打头的方法呢?

<aop:advisor advice-ref="txAdvice" pointcut="execution(public * *..*.service.*.*(..))"></aop:advisor>

?利用aop的advosor将advice和pontcut装配起来. 将事务交给Spring管理.

?

?