Spring简单理解-代理及事务

spring是一个轻量级的开源框架,它的核心就是IOC和AOP。

IOC,控制反转,又称依赖注入,它不需要我们再去频繁的new对象,spring会自动帮我们装配bean,需要的时候直接到这个IOC容器中去取,就好比如租房子,以前租房子需要一个房子一个房子找,费时费力,然后现在加入一个房屋中介,把你需要的房型告诉中介,就可以直接选到需要的房子,中介就相当于spring容器。
有反转,也就有正转。由我们自己在对象中主动控制去直接获取依赖对象,就是正转;而反转由容器来帮忙创建以及注入依赖对象。
@autowild这个注解实现注入,把注入的类放到IOC容器中,底层反射自动帮你创建对象,放在容器中,进行调用。

AOP,面向切面编程,对事务进行管理,提高程序的可重用性,提高开发效率。我们只需要专注于业务的处理,剩下的都交给AOP进行管理,相当于演员和经纪人的关系,演员只需要负责表演,剩下的工作都交给了经纪人,AOP相当于经纪人。

AOP支持两种动态代理:

若目标对象实现了若干接口,spring使用JDK的java.lang.reflect.Proxy类代理。
优点:因为有接口,所以使系统更加松耦合
缺点:为每一个目标类创建接口
例如:dao层实现、service层实现类

若目标对象没有实现任何接口,spring使用CGLIB库生成目标对象的子类。
优点:因为代理类与目标类是继承关系,所以不需要有接口的存在。
缺点:因为没有使用接口,所以系统的耦合性没有使用JDK的动态代理好。
例如:AOP切面、通知、连接点

说到AOP管理事务,那现在就来说一下事务。

什么是事务? 一系列的数据库操作,在完成一个功能的时候涉及到好几条sql语句的执行。

事务控制:

Spring提供两种管理事务的方式,一种是声明式事务,一种是编程式事务。

Spring的声明式事务管理,基于Spring的AOP,不再需要写commit,rollback,(但Spring仍然没有放弃编程式的事务管理策略)。

Spring的编程式事务管理,为我们提供了一个TransactionTemplate,使用回调机制,将应用代码从样板式的资源获取和释放代码中解放出来,不再有大量的try/catch/finally/try/catch代码块。

事务的四大特性:

1、原子性— 事务执行要不都成功,要不就都失败
2、一致性— 事务在执行前后要保持数据库的一致性状态
3、隔离性—一个事务的执行不受其他事务的干扰,并发执行的各个事务之间互不干扰
4、持久性— 事务一旦提交,对数据库中数据的改变就是永久性的

事务的传播特性:

1、Propagation.REQUIRED
最常用的一个传播特性,这个方法必须是在事务的环境下执行,
如果当前环境没有开启事务就开启,如果是有别的方法开启的事务就不开启
2、Propagation.REQUIRES_NEW
无论何时自身都会开启事务
3、Propagation.SUPPORTS
自身不会开启事务,在事务范围内则使用相同事务,否则不使用事务
4、Propagation.NOT_SUPPORTED
自身不会开启事务,在事务范围内使用挂起事务,运行完毕恢复事务
5、Propagation.MANDATORY
自身不开启事务,必须在事务环境使用否则报错
6、Propagation.NEVER
自身不会开启事务,在事务范围使用抛出异常
7、Propagation.NESTED
如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务,
则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行。

具体事务的配置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值