Spring框架中的三种事务处理,配置信息如何配置

11年前
第一种(基于Spring框架1.2):
<!-- 使用代理人的方式 -->
<!-- 因为本身service没有事务的功能,所以给service找个代理人,来帮它处理事务 -->
<bean id="UsersService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<!-- 代理目标 (代理的是谁) -->
<property name="target">
<bean class="com.hygj.service.UsersService">
<property name="usersDAO">
<ref bean="UsersDAO"/>
</property>
</bean>
</property>
<!-- 设置代理的属性 -->
<property name="transactionAttributes">
<props>
<!-- 设置代理范围(粒度) key:方法名  *进行通配 value:事务等级 -->

<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*save*">PROPAGATION_REQUIRED</prop>
</props>
</property>
<!-- 确认事务管理器 -->
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
</bean>
------------------------------------------------------------------
第二种(基于Spring1.2):
<!-- 自动创建代理
当去访问的类满足beanNames所设定的条件,就给这个类自动创建一个代理类。创建完成后,去interceptors所指定的拦截器当中去寻找
要做的工作。到了拦截器之后,首先比对调用的方法是不是满足拦截器所设定的方法的条件。如果满足,则去指定的事务管理器当中去进行
事务操作。
 -->
 
<!-- 创建事务的拦截器 -->
<bean id="txInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<!-- 确认事务管理器 -->
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
<!-- 事务当中的属性 -->
<property name="transactionAttributes">
<props>
<prop key="save">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 根据类的名称自动创建代理人 -->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 设置bean的名称,给什么名字的类自动创建代理人 -->
<property name="beanNames">
<list>
<value>*Service*</value>
</list>
</property>
<!-- 确认事务的拦截器 -->
<property name="interceptorNames">
<list>
<value>txInterceptor</value>
</list>
</property>
</bean>
------------------------------------------------------------------
第三种(基于Spring框架2.0)、
<!-- 基于spring2.0 -->
<!-- 通知:在调用目标方法时,之前或之后所调用的方法 -->
<tx:advice id="myAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- name:方法名  可以使用通配符
 propagation:事物等级  默认为required
read-only:只读  默认为false         -->
<tx:method name="*" read-only="true"/>
<tx:method name="*save*"/>
</tx:attributes>
</tx:advice>
<!-- 设置拦截的条件,并生成代理 -->
<aop:config proxy-target-class="true">
<!-- 设置通知器:
通知:做什么事
切入点:条件,满足什么条件之后才去执行通知 -->
<aop:advisor advice-ref="myAdvice" pointcut="execution(* com.hygj.service..*.*(..))"/></aop:config>