浏览 1258 次
|
锁定老贴子 主题:Spring是如何实现声明式事务管理的?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2006-12-22 关键字: 实现声明式事务管理的原理是...?
虽然声明式事务这个概念在以前的EJB中也提起过,但正如大家所了解的EJB大家都知道,其对象的创建和对象的调用,都需要通过容器(EJB服务器完成),因为通过RMI机制实现的EJB,有一个EJBObject接口和Bean类的概念,通过RMI机制访问EJB容器调用EJBObject对象,可以调用相应的EJB实现类完成业务处理。但是Spring中没有这样的实现机制,自然也没有给Spring调用和转调的过程,这样Spring是如何来处理这种声明式事务的了?说通俗点,也就是Spring是通过什么来捕获我的调用请求来判断给出什么样的事务,以及根据方法处理情况给出是提交还是回滚的操作的了?是不是使用AOP实现的?能否有下实现细节?
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2006-12-22
确实使用的是aop。
也说几句大白话。spring创建bean的时候,对于声明式事务管理的bean或者用jdk dynamic proxy或者用cglib subclass。把启动事务插到你的业务代码之前,把关闭事务代码插到你业务代码后面。 到你手上被set的bean已经不是原来的样子了。你调用的其实是一个proxy。 |
|
| 返回顶楼 | |
|
最后更新时间:2006-12-22
具体的话看一下声明式事务的配置,
<bean id="transactionProxyTemplate" abstract="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="create*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="submit*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
TransactionProxyFactoryBean就是楼上所说的代理,transactionAttributes是事务类型的配置,什么方法执行什么事务,PROPAGATION_REQUIRED是事务传播类型,后面还可以跟隔离级别,一般是用默认的级别(确实有需要另谈),还有就读写策略,如果是只读就加上readOnly,还可以加一个参数是异常什么的(没用过) <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>这个是配置事务管理器,怎么利用aop的话看代码更易懂了
|
|
| 返回顶楼 | |
|
最后更新时间:2006-12-23
今天自己把Spring的原码翻出来看了一遍,以前对jdk dynamic proxy的实现原理和机制有点模糊,今天看了后收获良多,多谢楼上两位朋友
|
|
| 返回顶楼 | |






