Spring的aop思想、Spring管理事务

aop思想:(纵向重复,横向抽取)

Spring能够为容器中管理的对象生成动态代理对象
以前我们要使用动态代理,我们需要自己调用下面的方法
Proxy.newProxyInstance(xx,xx,xx);
生成代理对象
现在Spring能帮我们生成代理对象

Spring实现aop的原理

  1. 动态代理(有接口优先使用)
    被代理对象必须要实现接口,才能被代理,如果没有接口,将不能使用动态代理技术。
  2. cglib代理(有没有接口都可以)
    第三方代理技术,cglib代理。可以对任何类生成代理。代理的原理市对目标对象进行继承代理。如果目标对象用final修饰,那么该类无法被cglib代理。

aop名词

Jojinpoint(连接点):目标对象中,所有可以增强的方法。
Pointcut(切入点):目标对象中,已经增强的对象。
Advice(通知/增强):增强的代码块。
Target(目标对象):被代理对象。
Weaving(织入):将通知应用到切入点的过程。
Proxy(代理):将通知织入到目标对象之后形成代理对象。
Aspect(切面):切入点+通知。

aop事务

事务:
事务特性:acid
事务并发问题:
1、 脏读
2、 不可重复读
3、 幻读
事务的隔离级别:
1、读已提交
2、读未提交
3、可重复读
4、串行化

Spring封装了事务管理代码

事务操作:
1、 打开事务
2、 提交事务
3、 回滚事务
事务操作对象:
因为在不同平台,操作事务的代码各不相同。Spring提供了一个接口platformTransactionManager 接口(不同平台有不同的实现类
DataSourceJDBCTransactionManager
HibernatTransactionManager
注意:在Spring中事务管理,最为核心的对象就是TransactionManager对象

Spring管理事务的属性介绍

事务的隔离级别
1、 读未提交
2、 读已提交
3、 可重复读
4、 串行化
是否只读
1、 true 只读
2、 false 可操作

事务的传播行为

决定业务方法之间调用,事务应该如何处理

        propagation_required 支持当前事务,如果不存在,就新建一个(默认)
        propagation_supports 支持当前事务,如果不存在,就不使用事务
        propagation_mandatory 支持当前事务,如果不存在,抛出异常
        propagation_requires_new 如果有事务存在,挂起当前事务,创建一个新的事务
        propagation_not_supported 以非事务方式,如果有事务存在,挂起当前事务
        propagation_never 以非事务方式运行,如果有事务存在,抛出异常
        propagation_nested 如果当前事务存在,则嵌套事务执行

Spring管理事务的方式

1、 编码式:将核心事务管理器配置到Spring容器
2、 xml配置(aop):
1)、 导包 (aop、aspect、aop联盟、weaving织入包
2)、导入新的约束(tx)
3)、 配置通知
3、 注解配置(aop)
1)、 导包 (aop、aspect、aop联盟、weaving织入包
2)、导入新的约束(tx)
3)、 开启注解管理事务
4)、 使用注解

你可能感兴趣的:(Spring的aop思想、Spring管理事务)