2010-11-11 18 views
12

Estoy configurando un nuevo proyecto JPA + Spring. ¿Cuál es la diferencia (para mí como programador) entre:Spring: gestor de transacciones con anotación

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

y

<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager" /> 

en mi applicationContext.xml?

Respuesta

28

Hay una gran diferencia entre los aspectos Proxies y weaven de código de bytes. Los proxies solo pueden interceptar si la invocación proviene del "espacio exterior", pero no si la invocación proviene del objeto en sí (método.transactional)

Esto significa que si tiene una Clase con dos métodos, T y B . El método T tiene una anotación de transacción, y el método B invoca T por “this.T() ", entonces el proxy nunca se invoca (para T) por lo que no hay manejo de transacciones en este caso.

Si utiliza AspectJ, el código de manejo de transacciones se integra en el código de bytes de T, y se ejecutará sin importar si la invocación proviene del objeto o de otro objeto.

+0

muchas gracias por explicar con palabras claras y simples. –

6

The docs dicen:

modo los procesos

El defecto "proxy" granos de ser proxy utilizando el framework AOP de primavera anotados (siguiendo la semántica de proxy, como se mencionó anteriormente, aplicando el método de las llamadas entrantes a través del proxy solamente). El modo alternativo "aspectj" teje las clases afectadas con el aspecto de transacción AspectJ de Spring, modificando el código de byte de clase objetivo para aplicarlo a cualquier tipo de llamada a método. El tejido AspectJ requiere aspectos de resorte.jar en la ruta de acceso de clases así como el entrelazado en tiempo de carga (o en tiempo de compilación) habilitados. (Consulte la Sección 7.8.4.5, "Configuración de resorte" para obtener detalles sobre cómo configurar el tiempo de carga).

No importa (desde la perspectiva del desarrollador) qué modo se utilizará.

+0

oh gracias. por alguna razón no pude encontrar esta información. –

Cuestiones relacionadas