Transaction ProxyFactoryBean事務代理--Spring事務管理(1)

8814 ワード

springによる声明式事務は、そのAOPフレームワークによって実現される.springで声明的な事務を使うには、Transaction ProxFactoryBeanまでが必要ですが、ProxyFactoryBeanに似ています.しかし、その目的は事務文脈に方法をラッピングすることです.
自分のProxyFactoryBenを作って事務を処理しても同じ効果が得られますが、Transation ProxyFactoryBenは声明式事務のために設計されていますので、それを使うと簡単です.
 
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:代理インターフェースは事務を実行する種類のインターフェースを必要とします.
tractionAttributes:具体的に事務を追加する方法が必要です.
 
 
======配置が多い場合は継承式で設定できます.
 
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.