Spring @Transactional é aplicado como um proxy Jdk dinâmico e um aspecto aspectj
Estou no processo de adicionar transações declarativas do Spring por meio da anotação @Transactional a um projeto Java existente.
Quando encontrei um problema (não relacionado a essa pergunta), ativei o log de depuração completo. Curiosamente, notei o seguinte:
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
Após alguma depuração, descobri que as três primeiras entradas de log, onde diz que encontrou uma sessão vinculada ao thread e está usando essa transação, são produzidas por um JdkDynamicAopProxy na minha classe UserService.
A última mensagem de log parece alarmante. Ele é chamado em um ponto de junção antes da execução do método. Ao procurar na fonte AnnotationTransactionAspect, ela produz essa mensagem se nenhum gerenciador de transações tiver sido definido. Nesse caso, porque o Spring nunca executa nenhuma injeção de dependência nesse aspecto.
Parece-me que dois "estilos" de transações diferentes são aplicados: o proxy dinâmico E o aspecto. A única configuração relacionada à transação que tenho é:
<tx:annotation-driven transaction-manager="txManager" />
Estamos usando o AspectJ no projeto, mas não há nenhum aspecto AnnotationTransactionAspect registrado no meu aop.xml. Estamos usando o Spring 3.0.2.RELEASE.
Devo ficar alarmado com isso? O Spring registra esse aspecto para mim? Não devo usarannotation-driven
ao usar o AspectJ?