为什么要使用 Spring?
Spring 是一个轻量级的控制反转 IOC 和面向切面编程的 AOP 的容器框架
- 控制反转
Spring 通过一种称控制反转IOC 的技术促进了松耦合,
- 面向切面
Spring 提供了面向切面编程的支持,允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发,应用对象只实现他们应该做的——完成业务逻辑仅此而已。它们并不负责其它的系统级关注点,列如日志或者事务支持。
解释一下什么是 AOP?
- AOP 面向切面编程,在不改变原代码的基础上为代码增加新的功能,列如:日志、事务处理
解释下什么是 IOC?
- IOC即控制反转,又称为依赖注入,其原理就是让 bean 与 bean 之间以配置文件的形式组织在一起,而不是以硬编码的方法耦合在一起,相当于将需要的接口实现都注入到需要它的类中。
IOC的好处:低耦合,易管理。
Spring 事务实现方式有哪些?
- 编程式事务管理,我们需要在代码中通过调用 beginTransaction()、commit()、rollback() 等事务管理相关的办法,这就是编程式事务管理。
- 基于 TransactionProxyFactoryBean 的声明式事务管理
- 基于 @Transaction 的声明式事务管理
- 基于 Aspectj AOP 配置事务
说一下 Spring 的事务隔离机制?
事务隔离机制指的是一个事务对数据的修改与另一个并行的事务的隔离程度,当多个事务同时访问相同数据时,如果没有采取必要的隔离机制,就可能发生以下问题:
- 脏读:一个事务读到另一个事务未提交的更新数据
- 幻读:列如第一个事务对一个表中的数据进行了修改(比如这种修改是修改全部数据),同时,第二个事务也修改了这个表中的数据(这种修改时向表中插入一行新数据), 那么,以后就会发生操作第一个事务的用户发现表中还存在没有修改的数据行,就好像发生了幻觉。
- 不可重复读:比方说在同一个事务中先后执行两条一模一样的select语句,期间在此次事务中没有执行过任何DDL语句,但先后得到的结果不一致,这就是不可重复读。