2017-08-13 27 views
1

在我的应用程序中,我最初使用ProxyFactoryBean将事务应用于我的DAO Bean,如下所示;Spring的@Transactional在ProxyFactoryBean上的性能

<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。转换后的性能影响是什么?我打算在方法级应用交易,与目前实施的类级相反。

回答

1

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

From the Spring Documentation

哪里TransactionProxyFactoryBean来?

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

Spring 2.0之前的配置风格仍然是100%有效的 配置;将新的想象成简单地定义为代表您的TransactionProxyFactoryBean的豆类 。

看来你已经有利于Declarative over Programmatic Transaction Management(这是非常标准的这些天),所以没有理由不完全接受@Transactional分界风格。

+0

感谢您的回复。这种变化如何影响绩效? – nwGCham

+0

正如Spring Doc所说,现有的Spring工具正在以您的名义初始化TransactionProxyFactoryBeans。所以在这个领域,如果不是平等的话,它是微不足道的。性能方面的考虑主要来自于以下方面:1)基础持久性选择的非最佳使用(spring-jdbc/orm/hibernate),2)DB连接池的不使用,3)低效的批处理操作等 – dimitrisli