在我的项目中,所有经理类都以这种模式实现,
<bean id="companyManagerTxProxy" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager" />
<property name="proxyTargetClass"><value>true</value></property>
<property name="transactionAttributes">
<props>
<prop key="create*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean id="companyAdminManager" parent="companyManagerTxProxy" scope="prototype">
<property name="target">
<bean class="lucky.src.bto.controllerImpl.CompanyAdminManagerImpl">
</bean>
</property>
</bean>
您能否解释一下为什么我们在创建所有管理器的bean时使用org.springframework.transaction.interceptor.TransactionProxyFactoryBean。它的确切用途是什么?
最佳答案
这是一个广泛的问题,因为这里需要进行概念上的解释。简而言之:TransactionProxyFactoryBean是Spring的事务支持的一部分,并允许应用程序以与服务器无关的方式具有“事务”行为。换句话说:如果使用TransactionProxyFactoryBean配置服务,则可以替换EJB容器托管的Bean。
Please refer to Spring Documentation
您可能需要全面了解“交易”的概念。但是一个简短的解释是:
上面的解释涉及到AOP(面向方面的编程),其中您要在事务中给出的行为是“方面”。
通常需要配置三件事:
transactionAttribute是您为资源的读写操作提供事务行为的地方。在您的示例中,您的companyAdminManager
被赋予了交易行为。反过来,必须使用companyAdminManager
配置datasource
,该ojit_code将具有数据库url,用户/密码和其他相关信息。