1.配置一个BaseService,做为模板
<bean id="baseTxService"
lazy-init="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="delete*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
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="delete*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
关健点:lazy-init="true"
延时加载baseTxService,否则Spring要求为baseTxService设置Target属性。实际上我们需要在真正的业务实现配置时才设置Target。
2.业务类的配置如下:
<bean id="userService" parent="baseTxService" >
<property name="target" ref="userTarget" />
</bean>
<bean id="userTarget" class="mtn.hqzh.service.spring.UserService">
<property name="userDAO" ref="userDAO" />
</bean>
<bean id="userDAO" class="mtn.hqzh.service.dao.hibernate.UserDAO">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="userService" parent="baseTxService" >
<property name="target" ref="userTarget" />
</bean>
<bean id="userTarget" class="mtn.hqzh.service.spring.UserService">
<property name="userDAO" ref="userDAO" />
</bean>
<bean id="userDAO" class="mtn.hqzh.service.dao.hibernate.UserDAO">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
关健点:parent="baseTxService"
用parent属性指定模板的名称