2017-08-13 58 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