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管理.
?
?