Spring TransactionProxyFactoryBean仅在从外部类调用方法时才接受事务

时间:2013-01-28 21:20:22

标签: java spring transactions

以下是我正在使用的示例配置。

当我从外部类调用doSomething()方法时,事务性是所希望的。

但是,当我从“target”bean中调用相同的方法时,似乎事务永远不会启动,因此在发生故障时不会发生回滚。

这是预期的行为还是我错过了什么?

<bean id="my.bean" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager" ref="txManager"/>
    <property name="target" ref="my.bean.impl"/>
    <property name="transactionAttributes">
        <props>
            <prop key="doSomething">PROPAGATION_REQUIRED, -Exception</prop>
        </props>
    </property>
</bean>

1 个答案:

答案 0 :(得分:1)

是的,这是预期的行为。拦截器或代理程序包装目标bean,拦截从外部对bean进行的调用,然后委托给目标bean。它不知道内部呼叫。需要使用字节码检测来拦截内部呼叫。