事务和AOP

记录系统操作的日志

分析:写一个方法,记录系统中方法的操作信息,用AOP

@Transactional(Propagation = Propagation.REQUIRED)

事务的传播属性:多个事务同时存在,Spring如何处理这些事务的行为

REQUIRED(支持当前事务,有事务就加入,没有就新建事务)

NOT_SUPPORTED(如果当前存在事务,就把事务挂起,执行完后恢复)

SUPPORTS(当前有事务,就用,没有,就不用)

MANDATORY(当前必须有事务,没有就抛异常)

PROPAGATION_NEVER(当前有事务,就抛异常)

REQUIRES_NEW(当前有事务,就挂起,重新创建一个,没有事务,也新建一个)

AOP使用了jdk动态代理和cglib字节码对照库

使用AOP的好处:

1.减少方法中的重复代码

2.保证代码的开闭原则(对扩展开放对修改关闭)

3.提高代码的内聚性

AOP:

切入点:被增强的方法

proceedingJoinPoint 是JoinPoint的子类

通知的执行顺序:

环绕通知(@Around)

前置通知(@Before)

目标方法

返回通知(@AfterReturning)或异常通知(@AfterThrowing)

后置通知(@After)

环绕通知(@Around)

两个环绕通知的优先级:默认按照切面类的首字母排序,排在前面的优先级高,

也可以设置,在切面类中加 @Order(1),数字越小,优先级越高

也可以实现Ordered接口,重写getOrder方法,返回数字越小,优先级越高

事务和日志AOP冲突问题

因为默认使用的是同一个事务,可以给AOP新建一个事务 @Transactional(Propagation = Propagation.REQUIRES_NEW ),这样 即使运行时出错,也能抛出异常、记录错误日志、回滚数据库数据。

默认事务的优先级最高

你可能感兴趣的:(java,spring)