<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>
上面的类并没有实例化,所以他并不是完整的。然后每个需要被创建的代理都是它的子类,它包装了定义为内部类的代理target,因为该target不会以他自己的方式使用。下面是一个子类的例子:
<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为true,如上面所示,所以他并没有被初始化,Application contexts(而不是简单的bean factories),会默认初始化所有的singletons。因此,如果你有一个父bean的定义,你打算只把他作为模板,并且他是一个类,那么你必须将他的abstract属性设置为true。否则application context 会尝试预先实例化他。