如何验证正在使用哪种交易方式(AspectJ /代理)

时间:2019-07-11 12:27:28

标签: spring spring-boot proxy aspectj

我们目前正在Spring Boot中构建一个模块,该模块使用旧版本的配置,该配置基于Spring MVC之上,并且具有许多配置(XML和类)。

几周后,我们能够使Spring Boot与旧版配置兼容,但我们无法验证AspectJ是否确实按预期工作。

那我为什么这么说?

我们注意到,在配置过程中,在TransactionManagementConfigurationSelector内部(在下面的代码中),我们同时获得PROXYASPECTJ咨询模式:

/**
 * Returns {@link ProxyTransactionManagementConfiguration} or
 * {@code AspectJ(Jta)TransactionManagementConfiguration} for {@code PROXY}
 * and {@code ASPECTJ} values of {@link EnableTransactionManagement#mode()},
 * respectively.
 */
@Override
protected String[] selectImports(AdviceMode adviceMode) {
    switch (adviceMode) {
        case PROXY:
            return new String[] {AutoProxyRegistrar.class.getName(),
                    ProxyTransactionManagementConfiguration.class.getName()};
        case ASPECTJ:
            return new String[] {determineTransactionAspectClass()};
        default:
            return null;
    }
}

这种情况尤其令人好奇,因为在调试过程中,在配置结束时我们收到两次ASPECTJ 一次PROXY 。似乎我们的旧版AspectJ配置已被应用,但是某些配置也在配置代理建议。

经过进一步调查,我们发现了代理建议模式的发起者,即TransactionAutoConfiguration,更具体地说是TransactionAutoConfiguration.EnableTransactionManagementConfiguration.CglibAutoProxyConfiguration.class

应用以下排除规则后,无法在TransactionManagementConfigurationSelector上配置 PROXY 咨询模式,但是我们不确定100%会在某些时候不会影响该应用程序。

@SpringBootApplication(exclude = TransactionAutoConfiguration.class)

鉴于我们在应用程序上仅配置了AspectJ,并且此配置还应用了Proxy,是否有一种方法可以验证在交易过程中使用哪种模式,以及是否有可能,哪些类正在使用Proxy,哪些正在使用AspectJ?

0 个答案:

没有答案