TransactionProxyFactoryBean事务代理--Spring事务管理(1)

spring对声明式事务是通过它的AOP框架实现的。要在spring中使用声明式事务,需用到TransactionProxyFactoryBean,它类似于ProxyFactoryBean,不过其目的是将方法包装在事务上下文中。

可以创建自己的ProxyFactoryBean来处理事务,也能达到同样的效果,但TransactionProxyFactoryBean是专门为声明式事务设计的,用它会简单些。

 

定义Spring的事务管理

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dynamicDataSource" />
 
</bean>

 

 

定义事务代理

<bean id="knowledgeService"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager" />
<property name="target" ref="myknowledgeServiceTarget"></property>
<property name="proxyInterfaces"
value="com.ultrapower.imp.server.service.myknowledge.IMyKnowledgeService">
</property>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED, -Exception</prop>
</props>
</property>
 
</bean>

 

 

 

 

<bean id="myknowledgeServiceTarget"
class="com.ultrapower.imp.server.service.myknowledge.impl.MyKnowledgeServiceImpl">
<!-- 注入service需要使用的API -->
<property name="knowledgeAPI" ref="knowledgeAPI"></property>
<property name="knowledgeOrderAPI" ref="knowledgeOrderAPI"></property>
<property name="knowledgeOperAPI" ref="knowledgeOperAPI"></property>
<property name="knowledgeFileAPI" ref="knowledgeFileAPI"></property>
<property name="moduleId" value="knowledge" />
 
</bean>

 

 

说明:

target:需要执行事务的类

proxyInterfaces:代理接口 需要执行事务的类的接口

transactionAttributes:具体需要添加事务的方法

 

 

=======配置较多时 可以用继承式配置

 

1.定义父配置

 

<bean id="txProxyTemplate" abstract="true"
        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager" ref="transactionManager"/>
    <property name="transactionAttributes">
        <props>
            <prop key="*">PROPAGATION_REQUIRED</prop>
        </props>
    </property>
</bean>

 

2.定义子配置

 

<bean id="myService" parent="txProxyTemplate">
    <property name="target">
        <bean class="org.springframework.samples.MyServiceImpl">
        </bean>
    </property>
</bean>

 

子配置可以重写父配置

 

<bean id="mySpecialService" parent="txProxyTemplate">
    <property name="target">
        <bean class="org.springframework.samples.MySpecialServiceImpl">
        </bean>
    </property>
    <property name="transactionAttributes">
        <props>
            <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
            <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
            <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
            <prop key="store*">PROPAGATION_REQUIRED</prop>
        </props>
    </property>
</bean>

 

 

父配置如果只用作配置文件,会定义为abstract类型 这样容器初始化时候 将不会实际初始化该类

3.

 

你可能感兴趣的:(transaction)