Spring @Transactional se aplica como un proxy Jdk dinámico y como un aspecto de aspecto.

Estoy en el proceso de agregar transacciones declarativas Spring a través de la anotación @Transactional a un proyecto Java existente.

Cuando me encontré con un problema (no relacionado con esta pregunta), activé el registro de depuración completo. Curiosamente, noté lo siguiente:

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

Después de algunas depuraciones, descubrí que las primeras tres entradas de registro, donde dice que encontró una sesión enlazada a hilos y está usando esa transacción, son producidas por un JdkDynamicAopProxy en mi clase UserService.

Sin embargo, el último mensaje de registro parece alarmante. Se invoca en un punto de unión antes de la ejecución del método. Al mirar el origen de AnnotationTransactionAspect, genera este mensaje si no se ha configurado un administrador de transacciones. En este caso, porque Spring nunca realiza ninguna inyección de dependencia en este aspecto.

Me parece que se aplican dos "estilos" diferentes de transacciones: el proxy dinámico Y el aspecto. La única configuración relacionada con la transacción que tengo es:

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

Estamos utilizando AspectJ en el proyecto, pero no hay ningún aspecto AnnotationTransactionAspect registrado en mi aop.xml. Estamos utilizando Spring 3.0.2.RELEASE.

¿Debería estar alarmado por esto? ¿Spring registra este aspecto para mí? ¿No debería usarannotation-driven cuando usa AspectJ?

Respuestas a la pregunta(2)

Su respuesta a la pregunta