论坛首页 Java版 Spring

Spring是如何实现声明式事务管理的?

浏览 1258 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2006-12-22 关键字: 实现声明式事务管理的原理是...?
虽然声明式事务这个概念在以前的EJB中也提起过,但正如大家所了解的EJB大家都知道,其对象的创建和对象的调用,都需要通过容器(EJB服务器完成),因为通过RMI机制实现的EJB,有一个EJBObject接口和Bean类的概念,通过RMI机制访问EJB容器调用EJBObject对象,可以调用相应的EJB实现类完成业务处理。但是Spring中没有这样的实现机制,自然也没有给Spring调用和转调的过程,这样Spring是如何来处理这种声明式事务的了?说通俗点,也就是Spring是通过什么来捕获我的调用请求来判断给出什么样的事务,以及根据方法处理情况给出是提交还是回滚的操作的了?是不是使用AOP实现的?能否有下实现细节?
   
最后更新时间:2006-12-22
确实使用的是aop。

也说几句大白话。spring创建bean的时候,对于声明式事务管理的bean或者用jdk dynamic proxy或者用cglib subclass。把启动事务插到你的业务代码之前,把关闭事务代码插到你业务代码后面。

到你手上被set的bean已经不是原来的样子了。你调用的其实是一个proxy。
   
0 请登录后投票
最后更新时间: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的话看代码更易懂了
   
0 请登录后投票
最后更新时间:2006-12-23
今天自己把Spring的原码翻出来看了一遍,以前对jdk dynamic proxy的实现原理和机制有点模糊,今天看了后收获良多,多谢楼上两位朋友
   
0 请登录后投票
论坛首页 Java版 Spring

跳转论坛:
JavaEye推荐