Cuando llama a un método que no está @Transactional
dentro de un bloque de transacción, la transacción principal continuará con el nuevo método. Utilizará la misma conexión del método principal (con @Transactional
) y cualquier excepción causada en el método llamado (sin, @Transactional
hará que la transacción se revierta como se configuró en la definición de transacción.
Si llama a un método con una @Transactional
anotación desde un método @Transactional
dentro de la misma instancia, entonces el comportamiento transaccional de los métodos llamados no tendrá ningún impacto en la transacción. Pero si llama a un método con una definición de transacción desde otro método con una definición de transacción, y están en diferentes instancias, entonces el código en el método llamado seguirá las definiciones de transacción dadas en el método llamado.
Puede encontrar más detalles en la sección Gestión declarativa de transacciones de la documentación de transacciones de primavera .
El modelo de transacción declarativa de Spring utiliza un proxy AOP. por lo que el proxy AOP es responsable de la creación de las transacciones. El proxy AOP estará activo solo si los métodos dentro de la instancia se llaman desde fuera de la instancia.