В настоящее время мы создаем модуль в Spring Boot, который использует конфигурации из устаревшего, построенный поверх Spring MVC и имеет много конфигураций (XML и классы).
Через несколько недель мы смогли совместить Spring Boot с унаследованными конфигами, но мы не смогли проверить, действительно ли AspectJ работает должным образом.
И почему я так говорю?
Мы заметили, что во время конфигурации, внутри TransactionManagementConfigurationSelector
(в приведенном ниже коде), мы получаем режимы PROXY
и ASPECTJ
:
/**
* 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
.
Применение следующего исключения не позволило настроить режим подсказки PROXY на TransactionManagementConfigurationSelector
, но мы не уверены на 100%, что это повлияет на приложение в какой-то момент:
@SpringBootApplication(exclude = TransactionAutoConfiguration.class)
Учитывая тот факт, что у нас в нашем приложении настроен только AspectJ, и эта конфигурация также использует Proxy, есть ли способ проверить, какой режим используется во время транзакции , и, если это возможно, какие классы используют Proxy, а какие используют AspectJ?