一、對(duì)spring的理解
1.IOC/DI 控制反轉(zhuǎn)和依賴注入。方便解耦,簡(jiǎn)化開發(fā)。不再由代碼創(chuàng)建實(shí)例,而是交給spring容器,控制權(quán)由IOC來創(chuàng)建實(shí)例。注入的方式:接口注入,構(gòu)造器注入,getter和setter注入。
2.AOP面向切面編程,主要應(yīng)用是一些公共類
3.對(duì)事務(wù)采用聲明式的支持即配置事務(wù)管理策略。spring使用AOP來完成聲明式的事務(wù)管理。所以聲明式的事務(wù)管理都是以方法為單位的。
事務(wù)并發(fā)性的問題:臟讀,幻讀,不可重復(fù)讀
spring聲明的事務(wù)屬性有4個(gè)。
? ? ? ? ? 1)傳播行為:propagation。REQUIRED--支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就新建一個(gè)事務(wù)。這是最常見的選擇。事務(wù)掛起:方法A支持事務(wù),方法B不支持事務(wù),在事務(wù)中A調(diào)用B、則A在事務(wù)的控制當(dāng)中,B依舊不在事務(wù)的控制。
SUPPORTS--支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就以非事務(wù)方式執(zhí)行。
MANDATORY--支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就拋出異常。
REQUIRES_NEW--新建事務(wù),如果當(dāng)前存在事務(wù),把當(dāng)前事務(wù)掛起。
NOT_SUPPORTED--以非事務(wù)方式執(zhí)行操作,如果當(dāng)前存在事務(wù),就把當(dāng)前事務(wù)掛起。
PROPAGATION_NEVER--以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),則拋出異常。
PROPAGATION_NESTED--如果當(dāng)前存在事務(wù),則在嵌套事務(wù)內(nèi)執(zhí)行。如果當(dāng)前沒有事務(wù),則進(jìn)行與PROPAGATION_REQUIRED類似的操作。
? ? ? ? ? 2)隔離級(jí)別isolation(從低到高)
Read uncommitted 讀未提交,一個(gè)事務(wù)可以讀取另一個(gè)未提交事務(wù)的數(shù)據(jù)。
Read committed讀提交,一個(gè)事務(wù)要等另一個(gè)事務(wù)提交后才能讀取數(shù)據(jù)。
Repeatable read重復(fù)讀,就是在開始讀取數(shù)據(jù)(事務(wù)開啟)時(shí),不再允許修改操作
Serializable序列化,最高的事務(wù)隔離級(jí)別,事務(wù)串行化順序執(zhí)行,可以避免臟讀、不可重復(fù)讀與幻讀。但是這種事務(wù)隔離級(jí)別效率低下,比較耗數(shù)據(jù)庫性能,一般不使用。
一般的數(shù)據(jù)庫比如Oracle默認(rèn)為Read committed,但是MySQL默認(rèn)為Repeatable read。
? ? ? ? ? ?3)只讀提示read-only:true/false
? ? ? ? ? 4)事務(wù)超時(shí)期間timeout該屬性用于設(shè)置事務(wù)的超時(shí)秒數(shù),默認(rèn)值為-1表示永不超時(shí)
4.方便集成各種優(yōu)秀的框架
5.降低javaeeAPI的使用難度
二、spring的配置方式
1.配置數(shù)據(jù)源DataSource
2.配置事務(wù)管理器
3.配置事務(wù)管理策略
4.配置事務(wù)的AOP,(事務(wù)策略的API,即是那些方法配置事務(wù))(aop:config)
事務(wù)管理器引用DataSource,事務(wù)管理策略中寫明所屬于的事務(wù)管理器,并聲明對(duì)事物的屬性配置(隔離級(jí)別,傳播行為,只讀提示,事務(wù)超時(shí)時(shí)間),配置事務(wù)的AOP、就是聲明這些事務(wù)管理策略應(yīng)用的方法。
三、spring 中bean的作用范圍:
singleton(比如service,dao),
prototype(如action),
request,在一次HTTP請(qǐng)求中,一個(gè)bean定義對(duì)應(yīng)一個(gè)實(shí)例;即每次HTTP請(qǐng)求將會(huì)有各自的bean實(shí)例, 它們依據(jù)某個(gè)bean定義創(chuàng)建而成。該作用域僅在基于web的Spring ApplicationContext情形下有效。
session,在一次HTTP請(qǐng)求中,一個(gè)bean定義對(duì)應(yīng)一個(gè)實(shí)例;即每次HTTP請(qǐng)求將會(huì)有各自的bean實(shí)例, 它們依據(jù)某個(gè)bean定義創(chuàng)建而成。該作用域僅在基于web的Spring ApplicationContext情形下有效。
global session在一個(gè)全局的HTTP Session中,一個(gè)bean定義對(duì)應(yīng)一個(gè)實(shí)例。典型情況下,僅在使用portlet context的時(shí)候有效。該作用域僅在基于web的Spring ApplicationContext情形下有效。