尝试在resources.groovy中创建一个与XML相当的bean:
<bean id="txProxyTemplate" abstract="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager" />
<property name="target" ref="genericHibernateDAO" />
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<!--prop key="analyze">PROPAGATION_REQUIRED</prop -->
<prop key="validate">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="create*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="clear*">PROPAGATION_REQUIRED</prop>
<prop key="set*">PROPAGATION_REQUIRED</prop>
<prop key="reinitialize">PROPAGATION_REQUIRED</prop>
<prop key="zap*">PROPAGATION_REQUIRED</prop>
<prop key="turn*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
然后第二个bean使用这个抽象bean作为它的父:
<bean id="myCoolService" parent="txProxyTemplate">
<property name="target">
<bean
class="com.fourgablesguy.myapp.MyCoolService">
</bean>
</property>
</bean>
到目前为止,这是我在resources.groovy中所拥有的:
import org.springframework.transaction.interceptor.TransactionProxyFactoryBean
import com.fourgablesguy.myapp.MyCoolService
beans = {
txProxyTemplate(TransactionProxyFactoryBean) {
transactionManager = ref('transactionManager')
target = ref ('genericHibernateDAO')
transactionAttributes = [
"save*":"PROPAGATION_REQUIRED",
"validate":"PROPAGATION_REQUIRED",
"remove*":"PROPAGATION_REQUIRED",
"create*":"PROPAGATION_REQUIRED",
"delete*":"PROPAGATION_REQUIRED",
"add*":"PROPAGATION_REQUIRED",
"clear*":"PROPAGATION_REQUIRED",
"set*":"PROPAGATION_REQUIRED",
"reinitialize":"PROPAGATION_REQUIRED",
"zap*":"PROPAGATION_REQUIRED",
"turn*":"PROPAGATION_REQUIRED",
"*":"PROPAGATION_REQUIRED"
]
}
myCoolService(MyCoolService) {
}
}
不确定如何将txProxyTemplate bean设置为abstract,将myCoolService bean设置为将txProxyTemplate bean作为父项,将myCoolService bean作为目标。
答案 0 :(得分:3)
这在文档中有部分描述,请参阅http://grails.org/doc/latest/guide/spring.html
通常,通过省略其类来创建bean摘要,但在这种情况下,由于您要指定类但仅将其用作父bean,因此需要显式设置abstract
属性。要使另一个bean使用它作为其父项,请设置parent
属性:
import org.springframework.transaction.interceptor.TransactionProxyFactoryBean
import com.fourgablesguy.myapp.MyCoolService
beans = {
txProxyTemplate(TransactionProxyFactoryBean) { bean ->
bean.abstract = true
transactionManager = ref('transactionManager')
target = ref('genericHibernateDAO')
transactionAttributes = [
"save*":"PROPAGATION_REQUIRED",
"validate":"PROPAGATION_REQUIRED",
"remove*":"PROPAGATION_REQUIRED",
"create*":"PROPAGATION_REQUIRED",
"delete*":"PROPAGATION_REQUIRED",
"add*":"PROPAGATION_REQUIRED",
"clear*":"PROPAGATION_REQUIRED",
"set*":"PROPAGATION_REQUIRED",
"reinitialize":"PROPAGATION_REQUIRED",
"zap*":"PROPAGATION_REQUIRED",
"turn*":"PROPAGATION_REQUIRED",
"*":"PROPAGATION_REQUIRED"
]
}
myCoolService(MyCoolService) { bean ->
bean.parent = ref('txProxyTemplate')
}
}
编辑:重新阅读你的bean defs之后,看起来这就是你真正需要的东西:
myCoolService { bean ->
bean.parent = ref('txProxyTemplate')
target = { MyCoolService s ->
// props for the inner bean
}
}