在我的应用程序中,我最初使用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。转换后的性能影响是什么?我打算在方法级别应用事务,与当前实现的类级别相反。
答案 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时,将仅建议那些方法
那是唯一的区别。