Spring的声明式事务

声明式事务
  声明式事务(Programmatic transaction management)是Spring提供的对程序事务管理的方式之一。
  Spring的声明式事务顾名思义就是采用声明的方式来处理事务。这里所说的声明,就是指在配置文件中申明 。用在Spring配置文件中声明式的处理事务来代替代码式的处理事务。这样的好处是,事务管理不侵入开发的组件,具体来说,业务逻辑对象就不会意识到正在事务管理之中 ,事实上也应该如此,因为事务管理是属于系统层面的服务,而不是业务逻辑的一部分,如果想要改变事务管理策划的话,也只需要在定义文件中重新配置即可;在不需要事务管理的时候,只要在设定文件上修改一下,即可移去事务管理服务,无需改变代码重新编译,这样维护起来极其方便。
  Spring使用AOP来完成声明式的事务管理 ,因而声明式事务是以方法为单位,Spring的事务属性自然就在于描述事务应用至方法上的策略,在Spring中事务属性有以下四个参数:
  1.传播行为
  2.隔离级别
  3.只读提示
  4.事务超时期间

来自:百度百科

 

Spring 中进行事务管理的通常方式是利用AOP(面向切片编程)的方式,为普通java类封装事务控制,它是通过动态代理实现的,由于接口是延迟实例化的, spring在这段时间内通过拦截器,加载事务切片。原理就是这样。

 

Spring没有直接管理事务,它有许多供选择的事务管理器,将事务管理的责任委托给某个特定平台的事务实现。


Spring的声明式事务
 每个事务管理器都充当了对特定平台的失误实现的代理。这样就只需与Spring中的事务打交道,而不用关心实际上事务实现是什么样的。

 

Spring中的声明式事务,需用到TransactionProxyFactoryBean

声明式事务管理的配置方式,通常有如下三种:
1.使用TransactionProxyFactoryBean为目标bean生成事务代理的配置。此方式是最传统,配置文件最臃肿、难以阅读的方式。
2.采用bean继承的事务代理配置方式,比较简洁,但依然是增量式配置。
3.使用BeanNameAutoProxyCreator,根据bean name自动生成事务代理的方式,这是直接利用Spring的AOP框架配置事务代理的方式,需要对Spring的AOP框架有所理解。但这种方式避免了增量式配置,效果非常不错。
4.DefaultAdvisorAutoProxyCreator:这也是直接利用Spring的AOP框架配置事务代理的方式,效果也非常不多,只是这种配置方式的可读性不如第三种方式。

http://zfsn.iteye.com/blog/663952

http://blog.csdn.net/hangke/archive/2007/12/05/1917904.aspx

 

TransactionProxyFactoryBean是什么时候被实例化的?它的实例在哪里被使用?是如何使用的?有何具体行为?

问题1:TransactionProxyFactoryBean在拦截器成功拦截到数据库请求的时候被实例化的,其实这也就是所谓的反向控制(你叫它依赖注入也行)。
问题2:TransactionProxyFactoryBean在拦截器成功拦截到数据库请求的时候被使用。
问题3:TransactionProxyFactoryBean在拦截器成功拦截到数据库请求后,会自动将该数据库操作加上事务控制。
问题3:成功时提交事务,失败时回滚事务。
<!-- 定义TransactionProxyFactoryBean,该bean是个bean后处理器,无需被引用,因此没有id属性-->  
    <bean class="org.springframework.aop.framework.autoproxy.TransactionProxyFactoryBean">  
     <!--  指定对满足哪些bean name的bean自动生成业务代理 -->  
        <property name="beanNames">  
            <!--  下面是所有需要自动创建事务代理的bean-->  
            <list>  
                <value>*Dao</value>  
            </list>  
            <!--  此处可增加其他需要自动创建事务代理的bean-->  
        </property>  
        <!--  下面定义TransactionProxyFactoryBean所需的事务拦截器-->  
        <property name="interceptorNames">  
            <list>  
                <value>transactionInterceptor</value>  
                    <!-- 此处可增加其他新的Interceptor -->  
            </list>  
        </property>  
    </bean>

你可能感兴趣的:(spring,AOP,bean,百度,配置管理)