¿Cuáles son los principios de implementación de Spring Aop y Aspectj Aop, y qué métodos de mejora son compatibles con los dos marcos de AOP?
Hola, no lo pienses demasiado, puedes consultar lo siguiente:
1 Utilice la gestión de transacciones AOP basada en anotaciones
Explore tx: anotación. Etiqueta basada en anotaciones:
La etiqueta es el núcleo del soporte de gestión de transacciones basada en anotaciones.
Atributos de la etiqueta:
transaction-manager: Especifica una referencia al bean PlatformTransactionManager existente, que se utilizará para las notificaciones. default="transactionManager"
modo: especifica la forma en que el marco de gestión de transacciones Spring crea beans de notificación. Los valores disponibles son proxy y aspectoj. El primero es el valor predeterminado, lo que indica que el objeto de notificación es un proxy JDK; el segundo indica que Spring AOP utilizará AspectJ para crear el proxy.
orden: Especifica el orden en el que se crean los aspectos. Esta propiedad se puede utilizar siempre que el objeto de destino tenga varias notificaciones.
proxy-target-class: si este atributo es verdadero, significa que desea proxy de la clase de destino en lugar de todas las interfaces implementadas por el bean. default="false"
Explore la anotación @Transactional:
Puede especificar la propagación, el nivel de aislamiento, el tiempo de espera y las excepciones permitidas y no permitidas.
Atributos de la anotación @Transactional:
propagación: Especifica la propagación utilizada en la definición de la transacción
Aislamiento: Establece el nivel de aislamiento de la transacción
timeout: especifique el tiempo de espera de la transacción (segundos)
readOnly: especifique el tiempo de espera de la transacción
noRollbackFor: una serie de excepciones que puede generar el método de destino, pero el la notificación aún enviará la transacción
rollbackFor: una serie de excepciones. Si el método de destino genera estas excepciones, la notificación revertirá la transacción
Resumen de la gestión de transacciones basada en anotaciones:
Si se define en una clase, entonces todos los métodos usan el mismo método y algunos lectores se quejarán de que se dan demasiadas cosas.
Si defines anotaciones en cada método, será muy problemático.
(Puede utilizar la gestión de transacciones XML AOP para manejar mejor esta situación)
2. Utilice la etiqueta de gestión de transacciones XML AOP
, que creará una transacción. notificación.
¿ver copia simple en el portapapeles?
o
lt; pointcut id="allServiceMethods"
expression="execution(* com.apress.prospring2.ch16.services.*.*(..))"/gt;
lt; aop: asesor consejo-ref="defaultTransactionAdvice"
pointcut- ref="allServiceMethods"/gt;
lt; tx: método
nombre="*"
isolation="DEFAULT"
propagación="REQUIRED"
no-rollback-for="java.lang.RuntimeException"
timeout="100"/gt
lt; tx: método
name="get*"
read-only="true"/gt
3. Introducción a tx: etiqueta de consejo
p >
id es el identificador del bean de asesoramiento y el administrador de transacciones debe hacer referencia a un bean PlatformTransactionManager.
También puedes personalizar el comportamiento de las notificaciones creadas por etiquetas mediante etiquetas.
Atributos de la etiqueta:
nombre: el patrón coincidente del nombre del método, que le notifica que encuentre un método coincidente basado en este patrón.
propagación: establece el nivel de propagación utilizado para la definición de transacciones.
Aislamiento: Establece el nivel de aislamiento de la transacción.
timeout: Especifica el tiempo de espera de la transacción (segundos).
solo lectura: este atributo es verdadero para indicar que la transacción es de solo lectura.
no-rollback-for: una lista separada por comas de clases de excepción que el método de destino. se puede descartar sin provocar que la ejecución de la notificación se revierta
rollback-for: una lista separada por comas de clases de excepción que harán que la ejecución de la notificación se revierta cuando el método de destino se quede sin estas excepciones. De forma predeterminada, esta lista está vacía, por lo que cualquier excepción de tiempo de ejecución que no esté en la lista de no reversión provocará una reversión.
El significado de los parámetros de aislamiento y propagación:
getIsolationLevel: controla los cambios de datos vistos por otras transacciones.
Nivel de aislamiento de transacción:
Descripción del nivel de aislamiento
Nivel predeterminado ISOLATION_DEFAULT (para la mayoría de las bases de datos, es ISOLATION_READ_COMMITTED)
ISOLATION_READ_UNCOMMITTED aislamiento más bajo nivel. De hecho, no deberíamos utilizar niveles de aislamiento porque otras transacciones pueden ver los datos modificados por la transacción antes de que se complete. Antes de que se confirmen otras transacciones, la transacción también puede ver las modificaciones realizadas por otras transacciones.
ISOLATION_READ_COMMITTED El nivel predeterminado para la mayoría de las bases de datos. Antes de que se complete la transacción, otras transacciones no pueden ver los datos modificados por la transacción. Lamentablemente, una vez confirmada la transacción, puede ver los datos insertados o actualizados por otras transacciones.
Esto significa que en diferentes puntos de la transacción, si otras transacciones modifican los datos, verá datos diferentes.
ISOLATION_REPEATABLE_READ Este nivel de aislamiento garantiza que si consulta un determinado conjunto de datos en una transacción, al menos pueda consultar el mismo conjunto de datos nuevamente, incluso si otras transacciones modifican los datos consultados. Sin embargo, si otras transacciones insertan datos nuevos, puede consultar los datos recién insertados.
ISOLATION_SERIALIZABLE es el nivel de aislamiento más caro y confiable. Todas las transacciones se ejecutan una tras otra en mi orden.
getPropagationBehavior: Especifica qué hace Spring cuando el código solicita una nueva transacción.
El comportamiento de propagación se refiere a:
Comportamiento de propagación Descripción
PROPAGATION_REQUIRED Si actualmente hay una transacción, Spring usará la transacción; de lo contrario, se creará una nueva transacción; comenzó.
PROPAGATION_SUPPORTS Si actualmente hay una transacción, Spring usará la transacción; de lo contrario, no se iniciará una nueva transacción.
PROPAGATION_MANDATORY Si actualmente hay una transacción, Spring usará la transacción; de lo contrario, se generará una excepción.
PROPAGATION_REQUIRES_NEW Spring siempre iniciará una nueva transacción. Si actualmente hay una transacción, la transacción se suspende.
PROPAGATION_NOT_SUPPORTED Spring no ejecutará el código en la transacción. El código siempre se ejecuta en un entorno no transaccional. Si hay una transacción en el período actual, la transacción se suspende.
PROPAGATION_NEVER Incluso si actualmente hay una transacción, Spring se ejecutará en un entorno de transacción. Si actualmente hay una transacción, se lanza una excepción.
PROPAGATION_NESTED Si actualmente existe una transacción, se ejecutará en una transacción anidada. De lo contrario, el comportamiento es el mismo que PROPAGATION_REQUIRED.
¡Espero adoptarlo!