一、对spring的理解
1.IOC/DI 控制反转和依赖注入。方便解耦,简化开发。不再由代码创建实例,而是交给spring容器,控制权由IOC来创建实例。注入的方式:接口注入,构造器注入,getter和setter注入。
2.AOP面向切面编程,主要应用是一些公共类
3.对事务采用声明式的支持即配置事务管理策略。spring使用AOP来完成声明式的事务管理。所以声明式的事务管理都是以方法为单位的。
事务并发性的问题:脏读,幻读,不可重复读
spring声明的事务属性有4个。
1)传播行为:propagation。REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。事务挂起:方法A支持事务,方法B不支持事务,在事务中A调用B、则A在事务的控制当中,B依旧不在事务的控制。
SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED--如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
2)隔离级别isolation(从低到高)
Read uncommitted 读未提交,一个事务可以读取另一个未提交事务的数据。
Read committed读提交,一个事务要等另一个事务提交后才能读取数据。
Repeatable read重复读,就是在开始读取数据(事务开启)时,不再允许修改操作
Serializable序列化,最高的事务隔离级别,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。
一般的数据库比如Oracle默认为Read committed,但是MySQL默认为Repeatable read。
3)只读提示read-only:true/false
4)事务超时期间timeout该属性用于设置事务的超时秒数,默认值为-1表示永不超时
4.方便集成各种优秀的框架
5.降低javaeeAPI的使用难度
二、spring的配置方式
1.配置数据源DataSource
2.配置事务管理器
3.配置事务管理策略
4.配置事务的AOP,(事务策略的API,即是那些方法配置事务)(aop:config)
事务管理器引用DataSource,事务管理策略中写明所属于的事务管理器,并声明对事物的属性配置(隔离级别,传播行为,只读提示,事务超时时间),配置事务的AOP、就是声明这些事务管理策略应用的方法。
三、spring 中bean的作用范围:
singleton(比如service,dao),
prototype(如action),
request,在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例, 它们依据某个bean定义创建而成。该作用域仅在基于web的Spring ApplicationContext情形下有效。
session,在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例, 它们依据某个bean定义创建而成。该作用域仅在基于web的Spring ApplicationContext情形下有效。
global session在一个全局的HTTP Session中,一个bean定义对应一个实例。典型情况下,仅在使用portlet context的时候有效。该作用域仅在基于web的Spring ApplicationContext情形下有效。