AOP中的相关概念
Aspect(切面): Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice。
Joint point(连接点):表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 joint point。
Pointcut(切点):表示一组 joint point,这些 joint point 或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方。
Advice(增强):Advice 定义了在 Pointcut 里面定义的程序点具体要做的操作,它通过 before、after 和 around 来区别是在每个 joint point 之前、之后还是代替执行的代码。
Target(目标对象):织入 Advice 的目标对象.。
Weaving(织入):将 Aspect 和其他对象连接起来, 并创建 Adviced object 的过程
spring静态代理和动态代理
jdk动态代理 |
需要有顶层接口才能使用,但是在只有顶层接口的时候也可以使用,常见是mybatis的mapper文件是代理。 使用反射完成。使用了动态生成字节码技术。 |
cglib动态代理 | 可以直接代理类,使用字节码技术,不能对 final类进行继承。使用了动态生成字节码技术。 |
spring事务的传播行为
①、PROPAGATION_REQUIRED :required , 必须。默认值,支持当前事务,如果没有事务。则创建一个新的事务。
②、PROPAGATION_SUPPORTS:supports ,支持当前事务,如果没有事务,则非事务运行。
③、PROPAGATION_MANDATORY:mandatory ,支持当前事务,如果没有事务则抛出异常。
④、PROPAGATION_REQUIRES_NEW :requires_new,如果当前有事务存在,挂起,创建一个新的事务。
⑤、PROPAGATION_NOT_SUPPORTED :not_supported ,非事务运行,如果当前有事务存在,挂起。
⑥、PROPAGATION_NEVER :never,非事务运行,如果当前有事务,则抛出异常。
⑦、PROPAGATION_NESTED :nested ,如果当前事务存在,嵌套一个事务。
spring事务的隔离级别
①、ISOLATION_DEFAULT:使用后端数据库默认的隔离级别
②、ISOLATION_READ_UNCOMMITTED:最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读
③、ISOLATION_READ_COMMITTED:允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生
④、ISOLATION_REPEATABLE_READ:对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生
⑤、ISOLATION_SERIALIZABLE:最高的隔离级别,完全服从ACID的隔离级别,确保阻止脏读、不可重复读以及幻读,也是最慢的事务隔离级别,因为它通常是通过完全锁定事务相关的数据库表来实现的
Spring切面可以应用五种类型的通知:
before:前置通知,在一个方法执行前被调用。
after: 在方法执行之后调用的通知,无论方法执行是否成功。
after-returning: 仅当方法成功完成后执行的通知。
after-throwing: 在方法抛出异常退出时执行的通知。
around: 在方法执行之前和之后调用的通知。