Spring常被问到的问题
2018-11-13 本文已影响24人
刺風
一、Spring事务的特性:
- 原子性:不可分割
- 一致性:一荣俱荣,一损俱损
- 隔离性:互不干扰
- 持久性:提交即永久
二、Spring的五个隔离级别
- defalut(默认):同使用的数据库一致,数据库有4种隔离级别,意思和2、3、4、5一样,mysql的数据库隔离级别是可重复读,oracle的数据库隔离级别默认是已提交读。
- read_uncommitted( 未提交读):会出现脏读、不可重复读、幻读的情况,是最低的隔离级别
- read_committed(已提交读):解决脏读问题,但有不可重复读和幻读的问题
- repeatable_read(可重复读):解决脏读和不可重复读的问题,但有幻读的问题
- serializable(串行化):解决脏读、不可重复读、幻读的问题,隔离级别最高,消耗资源最低,代价最高。
三、spring事务的七个传播特性
- Propagation.REQUIRED:spring中事务中默认的传播属性
调用方已经存在事务,则加入到同一个事务中运行,否则自启一个事务 - Propagation.REQUIRES_NEW:
如果有事务则挂起,新开一个事务 - Propagation.SUPPORTS:
调用方存在事务,则加入到同一个事务中运行,若不存在事务,则以非事务的方式运行 - Propagation.NOT_SUPPORTED:
如果有事务则挂起,不走事务。 - Propagation.MANDATORY
如果有事务则加入到同一个事务中运行,若不存在,则抛出异常。 - Propagation.NEVER
如果存在事务,则抛出异常。 - Propagation.NESTED
一般不会用这个,这个实际上用到了数据库保存点的方式去做的,要求数据库支持这种方式才可以。如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
四、Spring的IoC
IoC又称为控制反转,是一种松耦合的思想,是面向对象编程的一种体现,想一下以前我们创建对象是如何创建的,在程序内部主动的去new一个自己所需要的一个对象,这就是控制正转,完全由程序自身的代码去控制,而反转则是由spring这个容器去控制,想要创建一个对象,不需要由对象主动去找,而是由容器帮对象找相应的依赖对象并注入,说道这里不得不说一下和IoC同样声名远播的名词,叫DI,我们称为依赖注入,可以这么说,ioc是一种思想的话,那么DI就是它具体的实现方案,通过依赖注入可以将自己想要的资源通过松耦合的配置注入到具体的实现类中。
依赖注入的实现原理:工厂模式+反射机制
五、Spring的AOP
AOP是面向切面编程,是OOP的补充和完善,利用横切的技术,把软件系统分为两个部分,核心关注点和横切关注点,将应用程序的商业逻辑同对其提供支持的通用服务进行分离。
实现AOP的技术主要分为二类:
- 采用动态代理技术,利用截取消息的方式,对消息进行装饰,以取代原有对象行为的执行。
- 采用静态织入的方式应用特定的语法创建切面,从而使得编译器可以在编译期间织入有关切面的代码。
在了解AOP时必须先去了解静态代理和动态代理(JDK动态代理、CGLIB)
https://www.cnblogs.com/ygj0930/p/6542259.html
这篇文章讲很好,借鉴一下,很清楚的表达了代理模式的实现方式