1.什么是Aop
Aop是面向切面编程。
2.为什么要使用Aop
代码解耦、减少代码冗余、提高代码复用。
3.Aop的一些应用场景
日志、事务、权限等...
4.Aop的核心
在方法执行之前或者执行之后处理事情。
5.spring的事务机制
spring的事务是基于Aop的环绕通知来实现的。
6.aop的底层实现机制
通过代理设计模式进行实现
代理设计模式分为静态代理、jdk动态代理、cglib动态代理
静态代理:会产生目标对象,代码冗余
jdk动态代理:需要实现InvocationHandandler接口。通过反射机制来实现
cglib动态代理:通过字节码技术来实现(ASM包装的类库)
7.@Transactional原理
1.通过反射机制获取方法上或该类有没有该注解。
2.如果有注解,使用环绕通知。
3.执行方法之前启动事务,方法执行完毕且无异常情况,提交事务。出现异常,使用异常通知回滚当前事务。.
8.spring事务传播行为
spring事务一共有七种传播行为:
常用的有两种 :
1.PROPAGATION_REQUIRED:如果当前有事务,就用当前事务,如果当前没有事务,就新建一个事务。
2.PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,则把当前事务挂起。
3.PROPAGATION_SUPPORTS:支持当前事务,如果当前没事务,就以非事务的方式执行。
4.PROPAGATION_NOT_SUPPORTED:以非事务的方式执行,如果当前存在事务,则把当前事务挂起。
5.PROPAGATION_NEVER:以非事务的方式执行,如果当前存在事务,则抛出异常。
6.PROPAGATION_MANDATORY:支持当前事务,如果当前没有事务,则抛出异常。
7.PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与 PROPAGATION_REQUIRED类似的操作。