Spring中@Transactional对ProxyFactoryBean的性能

时间:2017-08-13 10:27:16

标签: java spring transactions

在我的应用程序中,我最初使用ProxyFactoryBean将事务应用于我的DAO Beans,如下所示;

<bean id="buyProductDAO" class="com.trading.persistence.impl.jdbc.BuyProductDAOImpl" scope="prototype">
    <property name="jdbcTemplate">
        <ref bean="jdbcTemplate"/>
    </property>
</bean>

<bean id="buyProductDAOProxy" class="org.springframework.aop.framework.ProxyFactoryBean" scope="singleton">
    <property name="proxyInterfaces">
        <value>com.trading.persistence.impl.jdbc.BuyProductDAO</value>
    </property>
    <property name="interceptorNames">
        <list>
            <value>transactionInterceptor</value>
            <value>buyProductDAO</value>
        </list>
    </property>
</bean>

在这种情况下,如果我从我的代码中发现代理bean,它将返回我的事务bean。此外,目前,在类级别应用的交易。

我想重构我的代码以使用@Transactionl。转换后的性能影响是什么?我打算在方法级别应用事务,与当前实现的类级别相反。

2 个答案:

答案 0 :(得分:1)

在Spring中直接使用ProxyFactoryBean作为声明式事务管理的方式是一种非常古老的风格,不再需要了。

From the Spring Documentation

  

TransactionProxyFactoryBean在哪里?

     

Spring 2.0和Spring版本中的声明式事务配置   以上版本与以前的Spring版本有很大不同。主要的   区别在于不再需要配置   TransactionProxyFactoryBean bean。

     

Spring-2.0之前的配置样式仍然是100%有效   组态;认为新的只是简单的定义   代表您的TransactionProxyFactoryBean bean。

看来你已经偏爱Declarative over Programmatic Transaction Management了(这几乎是标准),所以没有理由不完全接受@Transactional分界风格。

答案 1 :(得分:0)

首先,我看不到您的bean定义中设置了targetObject(代理需要一个目标)

在当前配置下,将建议所有方法-事务将应用于DAO类中的所有方法,类似于在类级别应用@Transactional

当您将代码重构为在特定方法上使用@Transactional时,将仅建议那些方法

那是唯一的区别。