Я нахожусь в процессе добавления декларативных транзакций 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. 1282 Должен ли я быть встревожен этим? Spring регистрирует этот аспект для меня? Не следует ли использовать на основе аннотаций
при использовании AspectJ?