Spring @Transactional применяется как динамический Jdk-прокси и аспект aspectj

Я нахожусь в процессе добавления декларативных транзакций Spring через аннотацию @Transactional в существующий проект Java.

Когда я столкнулся с проблемой (не связанной с этим вопросом), я включил полное ведение журнала отладки. Любопытно, что я заметил следующее:

17:47:27,834 DEBUG HibernateTransactionManager:437 - Found thread-bound Session [org.hibernate.impl.SessionImpl@10ed8a8e] for Hibernate transaction
17:47:27,845 DEBUG HibernateTransactionManager:470 - Participating in existing transaction
17:47:27,865 DEBUG AnnotationTransactionAttributeSource:106 - Adding transactional method 'updateUserProfile' with attribute: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; ''
17:47:27,875 DEBUG AnnotationTransactionAspect:321 - Skipping transactional joinpoint [se.myservice.UserService.updateUserProfile] because no transaction manager has been configured

После некоторой отладки я обнаружил, что первые три записи журнала, в которых говорится, что он нашел сессию с привязкой к потоку и использует эту транзакцию, создаются JdkDynamicAopProxy в моем классе UserService.

Последнее сообщение журнала выглядит тревожным, хотя. Он вызывается в точке соединения перед выполнением метода. При поиске источника AnnotationTransactionAspect выдает это сообщение, если не установлен менеджер транзакций. В этом случае, потому что Spring никогда не выполняет никакого внедрения зависимости по этому аспекту.

Мне кажется, что применяются два разных «стиля» транзакций: динамический прокси и аспект. Единственная конфигурация, связанная с транзакциями, у меня есть:

<tx:annotation-driven transaction-manager="txManager" />

Мы используем AspectJ в проекте, но в моем файле aop.xml не зарегистрирован аспект AnnotationTransactionAspect. Мы используем Spring 3.0.2.RELEASE.

Должен ли я быть встревожен этим? Spring регистрирует этот аспект для меня? Я не должен использоватьannotation-driven при использовании AspectJ?

Ответы на вопрос(2)

Ваш ответ на вопрос