Java 在Spring中org.springframework.transaction.interceptor.TransactionProxyFactoryBean有什么用途

Java 在Spring中org.springframework.transaction.interceptor.TransactionProxyFactoryBean有什么用途,java,spring,Java,Spring,在我的项目中,所有管理器类都是以这种模式实现的 <bean id="companyManagerTxProxy" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager" ref="transactionManager" /> <

在我的项目中,所有管理器类都是以这种模式实现的

<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>

真的
需要进行传播
需要进行传播
需要传播,只读
需要进行传播

你能解释一下为什么我们使用org.springframework.transaction.interceptor.TransactionProxyFactoryBean来创建所有经理的bean吗。它的确切用途是什么?

这是一个广泛的问题,因为这里有概念上的解释。简而言之:TransactionProxyFactoryBean是Spring事务支持的一部分,它允许应用程序以独立于服务器的方式进行“事务”行为。换句话说:如果使用TransactionProxyFactoryBean配置服务,则可以替换EJB容器管理的bean

您可能需要全面理解事务的概念。但一个非常简短的解释是:

交易(信息的读取或写入)必须是 确保我们需要为软件提供“事务”行为 与数据库交互的资源(代码)(可能有其他 交易)

上面的解释稍微涉及了AOP(面向方面编程),在AOP中,您希望为事务提供的行为是“方面”

通常需要配置三件事:

transactionManager、目标和transactionAttribute

transactionAttribute用于为资源的读写提供事务行为。在您的示例中,
companyAdminManager
被赋予了trnaActional行为。
companyAdminManager
必须依次配置
datasource
,该数据源将包含数据库url、用户/通行证和其他相关信息

这里有两个很好的解释(解释每一行)

1.)

2.)我发现Scot的以下博文是一个简单易懂的例子,并附有解释。请阅读


Spring声明性事务可以是命令式(PlatformTransactionManager.class)或反应式(ReactiveTransactionManager.class)。实际上,这两个类只在trasaccationinterceptor中有所不同,trasaccationinterceptor是向事务方法提供建议的AOP/AspectJ类。您需要理解AOP/AspectJ才能理解前面的语句

如果希望以编程方式扩展Spring事务,而不是实现一个全新的TransactionManager,则只需提供TransactionInterception

例如:

 @Bean 
public TransactionInterceptor txAdvice() { 
  new TransactionInterceptor() {
    @Override
    @Nullable
    public Object invoke(MethodInvocation invocation) {

    //......have some fun

     }
  };
}