這一篇github上60k的Spring框架總結(jié)如绸!可以幫你搞定98%的框架問題

前言

簡(jiǎn)單來(lái)說(shuō)spring這個(gè)框架 不用程序也可以寫出來(lái)黍匾! 但是用了以后會(huì)給我們提供很大的便利這就是一個(gè)公司的架構(gòu)師為什么能賺那么多錢的原因赘来。

好的框架可以大大簡(jiǎn)化開發(fā)難度现喳、有很強(qiáng)的擴(kuò)展性和可維護(hù)性凯傲!而且每個(gè)人在面試的時(shí)候,Spring應(yīng)該都是逃不過(guò)的關(guān)卡嗦篱,能夠熟練的使用冰单,這并不難,知道它的底層原理才是高出別人一步的地方灸促。

重點(diǎn)

以下內(nèi)容是我在初學(xué)spring時(shí)候做的筆記诫欠,如今把筆記重新整理一遍,為了溫故而知新也為了分享給大家浴栽,筆記寫的算比較完整荒叼,希望各位大佬們?cè)偕毤有矫嬖嚨穆飞细玫膸椭么蠹遥?/p>

1、IOC和DI

IOC: 控制反轉(zhuǎn) 即控制權(quán)的轉(zhuǎn)移典鸡,將我們創(chuàng)建對(duì)象的方式反轉(zhuǎn)了,以前對(duì)象的創(chuàng)建是由我們開發(fā)人員自己維護(hù),包括依賴關(guān)系也是自己注入被廓。使用了spring之后,對(duì)象的創(chuàng)建以及依賴關(guān)系可以由spring完成創(chuàng)建以及注入萝玷,反轉(zhuǎn)控制就是反轉(zhuǎn)了對(duì)象的創(chuàng)建方式嫁乘,從我們自己創(chuàng)建反轉(zhuǎn)給了程序創(chuàng)建(spring)

DI: Dependency Injection 依賴注入 spring這個(gè)容器中,替你管理著一系列的類间护,前提是你需要將這些類交給spring容器進(jìn)行管理亦渗,然后在你需要的時(shí)候,不是自己去定義汁尺,而是直接向spring容器索取法精,當(dāng)spring容器知道你的需求之后,就會(huì)去它所管理的組件中進(jìn)行查找痴突,然后直接給你所需要的組件.
實(shí)現(xiàn)IOC思想需要DI做支持
注入方式: 1.set方式注入 2.構(gòu)造方法注入 3.字段注入
注入類型: 1.值類型注入 2.引用類型注入

好處:

1.降低組件之間的耦合度搂蜓,實(shí)現(xiàn)軟件各層之間的解耦.

2.可以使容器提供眾多服務(wù)如事務(wù)管理消息服務(wù)處理等等。當(dāng)我們使用容器管理事務(wù)時(shí)辽装,開發(fā)人員就不需要手工 控制事務(wù)帮碰,也不需要處理復(fù)雜的事務(wù)傳播

3.容器提供單例模式支持,開發(fā)人員不需要自己編寫實(shí)現(xiàn)代碼.

4.容器提供了AOP技術(shù)拾积,利用它很容易實(shí)現(xiàn)如權(quán)限攔截殉挽,運(yùn)行期監(jiān)控等功能

5.容器提供眾多的輔佐類,使這些類可以加快應(yīng)用的開發(fā).如jdbcTemplate HibernateTemplate

2.applicationContext & BeanFactory區(qū)別

BeanFactory接口 (1) spring的原始接口拓巧,針對(duì)原始接口的實(shí)現(xiàn)類功能較為單一
(2)BeanFactory接口實(shí)現(xiàn)類的容器斯碌,特點(diǎn)是每次在獲得對(duì)象時(shí)才會(huì)創(chuàng)建對(duì)象

ApplicationContext接口 (1)每次容器啟動(dòng)時(shí)就會(huì)創(chuàng)建容器中配置的所有對(duì)象
(2)提供了更多功能
(3)從類路徑下加載配置文件:
ClassPathXmlApplicationContext
從硬盤的絕對(duì)路徑下加載配置文件:FileSystemXmlApplication

3.spring配置詳解

3.1、元素屬性

bean元素:使用該元素描述需要spring容器管理對(duì)象
name屬性:給被管理的對(duì)象起個(gè)名字,獲得對(duì)象時(shí)getBean("name值")
class屬性:被管理對(duì)象的完整類名
id屬性:與name屬性一模一樣肛度,名稱不可重復(fù)傻唾,不能使用特殊字符

name和id之間的一些注意點(diǎn): 1、配置兩個(gè)相同的 id 或者 name 都不能通過(guò)承耿。
2冠骄、如果既配置了 id 伪煤,也配置了 name ,則兩個(gè)都生效凛辣。如果id和name都沒有指定抱既,則用類全名作為name,如<bean class="
com.stamen.BeanLifeCycleImpl">,則你可以通過(guò)getBean("com.stamen.BeanLifeCycleImpl")返回該實(shí)例蟀给。
3蝙砌、如果配置基本類的時(shí)候,注解和配置文件都使用的時(shí)候跋理,注解和配置文件中 name 相同的時(shí)候, 則兩個(gè)沖突恬总,配置文件生效前普。
如果配置基本類的時(shí)候,注解和配置文件都使用的時(shí)候壹堰,注解和配置文件中 name 不相同的時(shí)候拭卿, 則兩個(gè)不沖突,都能夠生效贱纠。

3.2峻厚、bean元素進(jìn)階( scope屬性 生命周期屬性)—————單例多例

(1)scope屬性 (1)singleton 默認(rèn)值
單例對(duì)象 :被標(biāo)識(shí)為單例的對(duì)象在spring容器中只會(huì)存在一個(gè)實(shí)例
(2)prototype
多例原型:被標(biāo)識(shí)為多例的對(duì)象,每次在獲得才會(huì)被創(chuàng)建,每次創(chuàng)建都是新的對(duì)象
(3)request
Web環(huán)境下,對(duì)象與request生命周期一致
(4)session
Web環(huán)境下,對(duì)象與session生命周期一致
總結(jié):絕大多數(shù)情況下,使用單例singleton(默認(rèn)值)谆焊,但是在與struts整合時(shí)候惠桃,務(wù)必要用prototype多例,因?yàn)閟truts2在每次請(qǐng)求都會(huì)創(chuàng)建一個(gè)新的Action辖试,若為單例辜王,在多請(qǐng)求情況下,每個(gè)請(qǐng)求找找spring拿的都是同一個(gè)action罐孝。

(2)生命周期屬性(了解)———初始化和銷毀 (1)配置一個(gè)方法作為生命周期初始化方法,spring會(huì)在對(duì)象創(chuàng)建之后立刻調(diào)用 init-method
(2)配置一個(gè)方法作為生命周期的銷毀方法,spring容器在關(guān)閉并銷毀所有容器中的對(duì)象之前調(diào)用destory-method
<bean init-method=“init” destory-method=“destory”></bean> 對(duì)應(yīng)注解為@PostConstruct

<bean name=“hello” class=“完整類名”></bean> 對(duì)應(yīng)注解為@PreDestory

(3)模塊化配置,即分模塊配置(導(dǎo)入其他spring配置文件) <beans>
<import resource = “spring配置文件的全路徑名” />
</beans>

3.3呐馆、spring三種對(duì)象的創(chuàng)建方式

(1)空參數(shù)構(gòu)造(重要)

這一篇github上60k的Spring框架總結(jié)!可以幫你搞定98%的框架問題

(2)靜態(tài)工廠創(chuàng)建(調(diào)用靜態(tài)方法創(chuàng)建)

調(diào)用UserFactory類的靜態(tài)createUser方法創(chuàng)建名為user的對(duì)象,放入容器

<bean name="user" class="cn.itcats.UserFactory" factory-method="createUser"></bean>

(3)實(shí)例工廠創(chuàng)建(調(diào)用非靜態(tài)方法創(chuàng)建)——需要配置兩個(gè)bean莲兢,因?yàn)闊o(wú)法通過(guò)類名調(diào)用非靜態(tài)方法

<bean name="user2" factory-bean="userFactory" factory-method="createUser"></bean>

<bean name=“userFactory” class=“cn.itcats.UserFactory”></bean>

3.4汹来、spring注入方式

(1)set方式注入(重點(diǎn))————值類型用value注入 引用類型用ref注入

11.png

(2)構(gòu)造方法注入

這一篇github上60k的Spring框架總結(jié)!可以幫你搞定98%的框架問題

函數(shù)注入 (3)p名稱空間注入———實(shí)際上set注入改艇,spring特有收班,為了簡(jiǎn)化<property>寫法

1、applicationContext.xml中<beans>標(biāo)簽頭部導(dǎo)入p命名空間

xmlns:p="http://www.springframework.org/schema/p"

2遣耍、書寫格式:值類型注入—— p:屬性名="值" 引用類型注入—— p:屬性名-ref="引用的<bean> name屬性"

把Run類中的name屬性值設(shè)置為haha闺阱,age屬性設(shè)置為20,引用屬性hello引用<bean name="hello" class="..."></bean>

<bean name="run2" class="cn.itcats.thread.Run" p:name="haha" p:age="20" p:hello-ref="hello"></bean>

(4)spel注入: spring Expression Language spring表達(dá)式語(yǔ)言

<bean name="runSpel" class="cn.itcats.thread.Run">
    <!-- 取bean標(biāo)簽中name為"user"中property為"name"中的value值 --!>
    <property name="name" value="#{user.name}"></property>
</bean>

SpEL特性:(1)舵变、使用Bean的ID來(lái)引用Bean酣溃;(2)瘦穆、調(diào)用方法和訪問對(duì)象的屬性;(3)赊豌、對(duì)值進(jìn)行算術(shù)扛或、關(guān)系和邏輯運(yùn)算;(4)碘饼、正則表達(dá)式匹配熙兔;(5)、集合操作

關(guān)于spel
https://www.cnblogs.com/goodcheap/p/6490896.html

復(fù)雜類型注入

1.array數(shù)組的注入

22.png

2.list集合的注入

這一篇github上60k的Spring框架總結(jié)艾恼!可以幫你搞定98%的框架問題

3.map集合的注入

這一篇github上60k的Spring框架總結(jié)住涉!可以幫你搞定98%的框架問題

4.properties的注入

這一篇github上60k的Spring框架總結(jié)!可以幫你搞定98%的框架問題

4钠绍、防止創(chuàng)建多個(gè)applicationContext取值/并指定記載spring配置文件的位置——web.xml

1舆声、需要導(dǎo)入包spring-web
2、在web.xml中配置監(jiān)聽器

33.png

5柳爽、使用注解方式代替配置文件(官方推薦使用注解)

1.在applicationContext.xml中書寫指定掃描注解

44.png

2.在類中書寫Component

這一篇github上60k的Spring框架總結(jié)媳握!可以幫你搞定98%的框架問題

注意:假如不寫括號(hào)內(nèi)的值(即name或id),默認(rèn)使用類名首字母小寫作為搜索磷脯,為什么意思呢蛾找?

比如Student類中使用了@Component 沒有書寫括號(hào)和值,那么默認(rèn)搜索id或name為student赵誓。

3.指定對(duì)象的作用范圍Scope

這一篇github上60k的Spring框架總結(jié)打毛!可以幫你搞定98%的框架問題

聲明Student類對(duì)象為多例 下面是對(duì)singleton和prototype的一些補(bǔ)充

singleton作用域:當(dāng)把一個(gè)Bean定義設(shè)置為singleton作用域是,Spring IoC容器中只會(huì)存在一個(gè)共享的Bean實(shí)例架曹,并且所有對(duì)Bean的請(qǐng)求隘冲,只要id與該Bean定義相匹配,則只會(huì)返回該Bean的同一實(shí)例绑雄。值得強(qiáng)調(diào)的是singleton作用域是Spring中的缺省作用域展辞。

prototype作用域:prototype作用域的Bean會(huì)導(dǎo)致在每次對(duì)該Bean請(qǐng)求(將其注入到另一個(gè)Bean中,或者以程序的方式調(diào)用容器的getBean()方法)時(shí)都會(huì)創(chuàng)建一個(gè)新的Bean實(shí)例万牺。根據(jù)經(jīng)驗(yàn)罗珍,對(duì)有狀態(tài)的Bean應(yīng)使用prototype作用域,而對(duì)無(wú)狀態(tài)的Bean則應(yīng)該使用singleton作用域脚粟。對(duì)于具有prototype作用域的Bean覆旱,有一點(diǎn)很重要,即Spring不能對(duì)該Bean的整個(gè)生命周期負(fù)責(zé)核无。具有prototype作用域的Bean創(chuàng)建后交由調(diào)用者負(fù)責(zé)銷毀對(duì)象回收資源扣唱。簡(jiǎn)單的說(shuō):

singleton 只有一個(gè)實(shí)例,也即是單例模式。

prototype訪問一次創(chuàng)建一個(gè)實(shí)例噪沙,相當(dāng)于new炼彪。

4.值類型的注入

實(shí)際通過(guò)反射field賦值

這一篇github上60k的Spring框架總結(jié)!可以幫你搞定98%的框架問題

實(shí)際通過(guò)set方式賦值

這一篇github上60k的Spring框架總結(jié)正歼!可以幫你搞定98%的框架問題

5.引用類型的注入

面試題: @AutoWired和@Resource的區(qū)別?

@AutoWired默認(rèn)以類型進(jìn)行查找辐马,@Resource默認(rèn)以名稱進(jìn)行查找

@AutoWired(required=false) + @Qualifier("user") == @Resource(name="user")

其中@Resource注解是jdk1.6后才有的

這一篇github上60k的Spring框架總結(jié)!可以幫你搞定98%的框架問題
這一篇github上60k的Spring框架總結(jié)局义!可以幫你搞定98%的框架問題

6.創(chuàng)建與銷毀方法

這一篇github上60k的Spring框架總結(jié)喜爷!可以幫你搞定98%的框架問題

7.spring整合junit測(cè)試(spring創(chuàng)建容器)

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")

[圖片上傳失敗...(image-8ca8c5-1622104126610)]

6、spring中AOP名詞解釋

JoinPoint(連接點(diǎn)):目標(biāo)對(duì)象中,所有可以增強(qiáng)的方法萄唇,就是spring允許你是通知(Advice)的地方檩帐,那可就真多了,基本每個(gè)方法的前另萤、后(兩者都有也行)轿塔,或拋出異常是時(shí)都可以是連接點(diǎn),spring只支持方法連接點(diǎn)仲墨。

Pointcut(切入點(diǎn)):目標(biāo)對(duì)象中,已經(jīng)被增強(qiáng)的方法。調(diào)用這幾個(gè)方法之前揍障、之后或者拋出異常時(shí)干點(diǎn)什么目养,那么就用切入點(diǎn)來(lái)定義這幾個(gè)方法。

Advice(通知/增強(qiáng)) :增強(qiáng)方法的代碼毒嫡、想要的功能癌蚁。

Target(目標(biāo)對(duì)象):被代理對(duì)象,被通知的對(duì)象兜畸,被增強(qiáng)的類對(duì)象努释。

Weaving(織入):將通知應(yīng)用到連接點(diǎn)形成切入點(diǎn)的過(guò)程

Proxy(代理):將通知織入到目標(biāo)對(duì)象之后形成的代理對(duì)象

aspect(切面):切入點(diǎn)+通知————通知(Advice)說(shuō)明了干什么的內(nèi)容(即方法體代碼)和什么時(shí)候干(什么時(shí)候通過(guò)方法名中的before,after咬摇,around等就能知道)伐蒂,二切入點(diǎn)說(shuō)明了在哪干(指定到底是哪個(gè)方法),切點(diǎn)表達(dá)式等定義肛鹏。

雖然現(xiàn)在都用Maven項(xiàng)目構(gòu)建逸邦,但是不能忘記,使用aop需要用到的包:spring-aop + spring-aspects +
springsource.org.aopalliance + springsource.org.aspectj.weaver

關(guān)于AOP看一個(gè)小例子:

1在扰、準(zhǔn)備目標(biāo)對(duì)象(被代理對(duì)象缕减,被通知的對(duì)象,被增強(qiáng)的類對(duì)象)

66.png

2芒珠、準(zhǔn)備通知(被增強(qiáng)方法的代碼桥狡,想要實(shí)現(xiàn)功能的方法代碼)

666.png

3、配置 applicationContext.xml 1.導(dǎo)入aop(約束)命名空間
2.配置目標(biāo)對(duì)象
3.配置通知對(duì)象
4.配置將通知織入目標(biāo)對(duì)象

這一篇github上60k的Spring框架總結(jié)!可以幫你搞定98%的框架問題

4裹芝、測(cè)試

這一篇github上60k的Spring框架總結(jié)部逮!可以幫你搞定98%的框架問題

總結(jié):通知的幾種類型
1.前置通知———目標(biāo)方法運(yùn)行之前調(diào)用
2.后置通知———目標(biāo)方法運(yùn)行之后調(diào)用(如果出現(xiàn)異常不調(diào)用)
3.環(huán)繞通知———目標(biāo)方法之前和之后都調(diào)用
4.異常攔截通知———如果出現(xiàn)異常,就會(huì)調(diào)用
5.后置通知———目標(biāo)方法運(yùn)行之后調(diào)用(無(wú)論是否出現(xiàn)異常都會(huì)調(diào)用)

7局雄、spring中的aop使用注解配置

1甥啄、applicationContext.xml中配置目標(biāo)對(duì)象,通知對(duì)象炬搭,開啟使用注解完成織入

這一篇github上60k的Spring框架總結(jié)蜈漓!可以幫你搞定98%的框架問題

2、@Aspect注解代表該類是個(gè)通知類宫盔,書寫切點(diǎn)表達(dá)式@Pointcut("execution(返回值 全類名.方法名(參數(shù)))")

77.png

注意環(huán)繞通知需要這么寫:

public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        //環(huán)繞方法執(zhí)行前
            //proceedingJoinPoint.proceed();表示對(duì)攔截的方法進(jìn)行放行
            //若注釋proceedingJoinPoint.proceed()則不會(huì)執(zhí)行被AOP匹配的方法
            proceedingJoinPoint.proceed();
            //環(huán)繞方法執(zhí)行后
    }

AOP注解解析:

@Before 前置通知(Before advice) :在某連接點(diǎn)(JoinPoint)——核心代碼(類或者方法)之前執(zhí)行的通知融虽,但這個(gè)通知不能阻止連接點(diǎn)前的執(zhí)行。為啥不能阻止線程進(jìn)入核心代碼呢灼芭?因?yàn)锧Before注解的方法入?yún)⒉荒軅鱌roceedingJoinPoint有额,而只能傳入JoinPoint。要知道從aop走到核心代碼就是通過(guò)調(diào)用ProceedingJionPoint的proceed()方法彼绷。而JoinPoint沒有這個(gè)方法巍佑。
這里牽扯區(qū)別這兩個(gè)類:Proceedingjoinpoint 繼承了 JoinPoint 。是在JoinPoint的基礎(chǔ)上暴露出 proceed 這個(gè)方法寄悯。proceed很重要萤衰,這個(gè)是aop代理鏈執(zhí)行的方法。暴露出這個(gè)方法猜旬,就能支持 aop:around 這種切面(而其他的幾種切面只需要用到JoinPoint脆栋,這跟切面類型有關(guān)), 能決定是否走代理鏈還是走自己攔截的其他邏輯洒擦。建議看一下 JdkDynamicAopProxy的invoke方法椿争,了解一下代理鏈的執(zhí)行原理珊泳。這樣你就能明白 proceed方法的重要性七芭。

@After 后通知(After advice) :當(dāng)某連接點(diǎn)退出的時(shí)候執(zhí)行的通知(不論是正常返回還是異常退出)。

@AfterReturning 返回后通知(After return advice) :在某連接點(diǎn)正常完成后執(zhí)行的通知爬范,不包括拋出異常的情況邦危。

@Around 環(huán)繞通知(Around advice) :包圍一個(gè)連接點(diǎn)的通知洋侨,類似Web中Servlet規(guī)范中的Filter的doFilter方法【腧剑可以在方法的調(diào)用前后完成自定義的行為希坚,也可以選擇不執(zhí)行。這時(shí)aop的最重要的陵且,最常用的注解裁僧。用這個(gè)注解的方法入?yún)鞯氖荘roceedingJionPoint pjp个束,可以決定當(dāng)前線程能否進(jìn)入核心方法中——通過(guò)調(diào)用pjp.proceed();

@AfterThrowing 拋出異常后通知(After throwing advice) : 在方法拋出異常退出時(shí)執(zhí)行的通知。

8聊疲、spring整合jdbc

spring中提供了一個(gè)可以操作數(shù)據(jù)庫(kù)的對(duì)象茬底,對(duì)象封裝了jdbc技術(shù) ————JDBCTemplate JDBC模板對(duì)象,而JdbcDaoSupport則對(duì)JdbcTemplate進(jìn)行了封裝获洲,所以要操作JdbcTemplate阱表,或只需要繼承JdbcDaoSupport即可。

這一篇github上60k的Spring框架總結(jié)贡珊!可以幫你搞定98%的框架問題
88.png

依賴關(guān)系配置:

這一篇github上60k的Spring框架總結(jié)最爬!可以幫你搞定98%的框架問題

測(cè)試:

這一篇github上60k的Spring框架總結(jié)!可以幫你搞定98%的框架問題

9门岔、spring中的aop事務(wù)

這一篇github上60k的Spring框架總結(jié)爱致!可以幫你搞定98%的框架問題

事務(wù)的四大基本特性:

事物的概述⑴ 原子性(Atomicity)

原子性是指事務(wù)包含的所有操作要么全部成功,要么全部失敗回滾寒随,因此事務(wù)的操作如果成功就必須要完全應(yīng)用到數(shù)據(jù)庫(kù)糠悯,如果操作失敗則不能對(duì)數(shù)據(jù)庫(kù)有任何影響。

⑵ 一致性(Consistency)

一致性是指事務(wù)必須使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)變換到另一個(gè)一致性狀態(tài)妻往,也就是說(shuō)一個(gè)事務(wù)執(zhí)行之前和執(zhí)行之后都必須處于一致性狀態(tài)互艾。

拿轉(zhuǎn)賬來(lái)說(shuō),假設(shè)用戶A和用戶B兩者的錢加起來(lái)一共是5000讯泣,那么不管A和B之間如何轉(zhuǎn)賬忘朝,轉(zhuǎn)幾次賬,事務(wù)結(jié)束后兩個(gè)用戶的錢相加起來(lái)應(yīng)該還得是5000判帮,這就是事務(wù)的一致性。

⑶ 隔離性(Isolation)

隔離性是當(dāng)多個(gè)用戶并發(fā)訪問數(shù)據(jù)庫(kù)時(shí)溉箕,比如操作同一張表時(shí)晦墙,數(shù)據(jù)庫(kù)為每一個(gè)用戶開啟的事務(wù),不能被其他事務(wù)的操作所干擾肴茄,多個(gè)并發(fā)事務(wù)之間要相互隔離晌畅。

即要達(dá)到這么一種效果:對(duì)于任意兩個(gè)并發(fā)的事務(wù)T1和T2,在事務(wù)T1看來(lái)寡痰,T2要么在T1開始之前就已經(jīng)結(jié)束抗楔,要么在T1結(jié)束之后才開始,這樣每個(gè)事務(wù)都感覺不到有其他事務(wù)在并發(fā)地執(zhí)行拦坠。

關(guān)于事務(wù)的隔離性數(shù)據(jù)庫(kù)提供了多種隔離級(jí)別连躏,稍后會(huì)介紹到。

⑷ 持久性(Durability)

持久性是指一個(gè)事務(wù)一旦被提交了贞滨,那么對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)的改變就是永久性的入热,即便是在數(shù)據(jù)庫(kù)系統(tǒng)遇到故障的情況下也不會(huì)丟失提交事務(wù)的操作。

例如我們?cè)谑褂肑DBC操作數(shù)據(jù)庫(kù)時(shí),在提交事務(wù)方法后勺良,提示用戶事務(wù)操作完成绰播,當(dāng)我們程序執(zhí)行完成直到看到提示后,就可以認(rèn)定事務(wù)以及正確提交尚困,即使這時(shí)候數(shù)據(jù)庫(kù)出現(xiàn)了問題蠢箩,也必須要將我們的事務(wù)完全執(zhí)行完成,否則就會(huì)造成我們看到提示事務(wù)處理完畢事甜,但是數(shù)據(jù)庫(kù)因?yàn)楣收隙鴽]有執(zhí)行事務(wù)的重大錯(cuò)誤谬泌。

spring中事務(wù)的分類:

spring中事務(wù)可以分為編程式事務(wù)控制和聲明式事務(wù)控制。

編程式事務(wù)控制

自己手動(dòng)控制事務(wù)讳侨,就叫做編程式事務(wù)控制呵萨。

Jdbc代碼:

Conn.setAutoCommit(false); // 設(shè)置手動(dòng)控制事務(wù)

Hibernate代碼:

Session.beginTransaction(); // 開啟一個(gè)事務(wù)

【細(xì)粒度的事務(wù)控制: 可以對(duì)指定的方法、指定的方法的某幾行添加事務(wù)控制】

(比較靈活跨跨,但開發(fā)起來(lái)比較繁瑣: 每次都要開啟潮峦、提交、回滾.)

聲明式事務(wù)控制

Spring提供了對(duì)事務(wù)的管理, 這個(gè)就叫聲明式事務(wù)管理勇婴。

Spring提供了對(duì)事務(wù)控制的實(shí)現(xiàn)忱嘹。用戶如果想用Spring的聲明式事務(wù)管理,只需要在配置文件中配置即可耕渴; 不想使用時(shí)直接移除配置拘悦。這個(gè)實(shí)現(xiàn)了對(duì)事務(wù)控制的最大程度的解耦。

Spring聲明式事務(wù)管理橱脸,核心實(shí)現(xiàn)就是基于Aop础米。

【粗粒度的事務(wù)控制: 只能給整個(gè)方法應(yīng)用事務(wù),不可以對(duì)方法的某幾行應(yīng)用事務(wù)添诉∑ㄉ#】

(因?yàn)閍op攔截的是方法。)

Spring聲明式事務(wù)管理器類:

Jdbc技術(shù): DataSourceTransactionManager

Hibernate技術(shù): HibernateTransactionManager

有一點(diǎn)需要注意的:若為編程式事務(wù)控制栏赴,則開啟事務(wù)后一定要手動(dòng)釋放(提交或回滾)蘑斧,否則長(zhǎng)期占用內(nèi)存,有可能報(bào)事務(wù)異常

spring封裝了事務(wù)管理的代碼(打開须眷,提交竖瘾,回滾事務(wù))
事務(wù)操作對(duì)象,因?yàn)樵诓煌脚_(tái),操作事務(wù)的代碼各不相同.spring提供了一個(gè)接口
—————
PlatformTransactionManager 接口
————— 在不同平臺(tái),實(shí)現(xiàn)不同的接口即可
————— 注意:在spring中玩事務(wù)管理.最為核心的對(duì)象就是TransactionManager對(duì)象

這一篇github上60k的Spring框架總結(jié)!可以幫你搞定98%的框架問題

spring管理事務(wù)的屬性介紹
(1)事務(wù)的隔離級(jí)別
(2)是否只讀
(3)事務(wù)的傳播行為

配置事務(wù)的核心管理器花颗,它封裝了所有事務(wù)捕传,依賴于連接池(
DataSourceTransactionManager)

[圖片上傳失敗...(image-615cb9-1622104126607)]

xml中配置通知

這一篇github上60k的Spring框架總結(jié)!可以幫你搞定98%的框架問題

配置將通知織入目標(biāo)

這一篇github上60k的Spring框架總結(jié)扩劝!可以幫你搞定98%的框架問題

10乐横、spring中aop管理事務(wù) 注解使用步驟

這一篇github上60k的Spring框架總結(jié)求橄!可以幫你搞定98%的框架問題

在需要管理的方法或者類中聲明配置事務(wù)管理

@Transactional(isolation=Isolation.REPEATABLE_READ,readOnly=false,propagation=Propagation.REQUIRED)

這一篇github上60k的Spring框架總結(jié)!可以幫你搞定98%的框架問題

最后下面是我有幸在字節(jié)跳動(dòng)總監(jiān)手里扒到這份spring筆記葡公,部分知識(shí)章節(jié)發(fā)布到了在知乎上竟然1000+點(diǎn)贊罐农,今天就拿出來(lái)分享給大家。

1111.png

2222.png
3333.png

由于篇幅原因催什,這份筆記已經(jīng)被整理成了PDF文檔涵亏,有需要spring筆記完整文檔的麻煩點(diǎn)贊下面有領(lǐng)取方式

點(diǎn)贊后加QQ: 3516271825
備注:簡(jiǎn)書+Java

當(dāng)程序員容易,當(dāng)一個(gè)優(yōu)秀的程序員是需要不斷學(xué)習(xí)的蒲凶,從初級(jí)程序員到高級(jí)程序員气筋,從初級(jí)架構(gòu)師到資深架構(gòu)師,或者走向管理旋圆,從技術(shù)經(jīng)理到技術(shù)總監(jiān)宠默,每個(gè)階段都需要掌握不同的能力。早早確定自己的職業(yè)方向灵巧,才能在工作和能力提升中甩開同齡人搀矫。

35歲中年危機(jī)大多是因?yàn)楸欢唐诘睦鏍恐撸^(guò)早壓榨掉了價(jià)值刻肄,如果能一開始就樹立一個(gè)正確的長(zhǎng)遠(yuǎn)的職業(yè)規(guī)劃瓤球。35歲后的你只會(huì)比周圍的人更值錢!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末敏弃,一起剝皮案震驚了整個(gè)濱河市卦羡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌麦到,老刑警劉巖绿饵,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異瓶颠,居然都是意外死亡蝴罪,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門步清,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人虏肾,你說(shuō)我怎么就攤上這事廓啊。” “怎么了封豪?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵谴轮,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我吹埠,道長(zhǎng)第步,這世上最難降的妖魔是什么疮装? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮粘都,結(jié)果婚禮上廓推,老公的妹妹穿的比我還像新娘。我一直安慰自己翩隧,他們只是感情好樊展,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著堆生,像睡著了一般专缠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上淑仆,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天涝婉,我揣著相機(jī)與錄音,去河邊找鬼蔗怠。 笑死墩弯,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蟀淮。 我是一名探鬼主播最住,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼怠惶!你這毒婦竟也來(lái)了涨缚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤策治,失蹤者是張志新(化名)和其女友劉穎脓魏,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體通惫,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡茂翔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了履腋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片珊燎。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖遵湖,靈堂內(nèi)的尸體忽然破棺而出悔政,到底是詐尸還是另有隱情,我是刑警寧澤延旧,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布谋国,位于F島的核電站,受9級(jí)特大地震影響迁沫,放射性物質(zhì)發(fā)生泄漏芦瘾。R本人自食惡果不足惜捌蚊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望近弟。 院中可真熱鬧缅糟,春花似錦、人聲如沸藐吮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)谣辞。三九已至迫摔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間泥从,已是汗流浹背句占。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留躯嫉,地道東北人纱烘。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像祈餐,于是被迫代替她去往敵國(guó)和親擂啥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容