日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

大佬把Spring框架总结的「无比详细」,不信你学不会!

發(fā)布時(shí)間:2025/3/20 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大佬把Spring框架总结的「无比详细」,不信你学不会! 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
今日推薦

后端接口如何提高性能?

16 個(gè)寫(xiě)代碼的好習(xí)慣

為什么不推薦使用BeanUtils屬性轉(zhuǎn)換工具

盤點(diǎn)阿里巴巴 34 個(gè)牛逼 GitHub 項(xiàng)目

常見(jiàn)代碼重構(gòu)技巧(非常實(shí)用)

作者:itcats_cn

blog.csdn.net/itcats_cn/article/details/81479185

1、IOC和DI

IOC: 控制反轉(zhuǎn)

即控制權(quán)的轉(zhuǎn)移,將我們創(chuàng)建對(duì)象的方式反轉(zhuǎn)了,以前對(duì)象的創(chuàng)建是由我們開(kāi)發(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做支持

注入方式:

  • set方式注入

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

  • 字段注入

  • 注入類型:

  • 值類型注入

  • 引用類型注入

  • 好處:

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

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

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

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

    5.容器提供眾多的輔佐類,使這些類可以加快應(yīng)用的開(kāi)發(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都沒(méi)有指定,則用類全名作為name,如<bean class="com.stamen.BeanLifeCycleImpl">,則你可以通過(guò)getBean("com.stamen.BeanLifeCycleImpl")返回該實(shí)例。

    3、如果配置基本類的時(shí)候,注解和配置文件都使用的時(shí)候,注解和配置文件中 name 相同的時(shí)候, 則兩個(gè)沖突,配置文件生效。

    如果配置基本類的時(shí)候,注解和配置文件都使用的時(shí)候,注解和配置文件中 name 不相同的時(shí)候, 則兩個(gè)不沖突,都能夠生效。

    擴(kuò)展:SpringBoot內(nèi)容聚合

    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)造(重要)

    (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注入

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

    函數(shù)注入

    (3)p名稱空間注入———實(shí)際上set注入,spring特有,為了簡(jiǎn)化<property>寫(xiě)法

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

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

    2、書(shū)寫(xiě)格式:值類型注入—— ?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)用方法和訪問(wèn)對(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ù)組的注入

    2.list集合的注入

    3.map集合的注入

    4.properties的注入

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

    1、需要導(dǎo)入包spring-web

    2、在web.xml中配置監(jiān)聽(tīng)器

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

    1.在applicationContext.xml中書(shū)寫(xiě)指定掃描注解

    2.在類中書(shū)寫(xiě)Component

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

    比如Student類中使用了@Component ? 沒(méi)有書(shū)寫(xiě)括號(hào)和值,那么默認(rèn)搜索id或name為student。

    搜索Java知音公眾號(hào),回復(fù)“后端面試”,送你一份Java面試題寶典.pdf

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

    聲明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訪問(wèn)一次創(chuàng)建一個(gè)實(shí)例,相當(dāng)于new。

    4.值類型的注入

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

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

    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后才有的

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

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

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

    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

    搜索Java知音公眾號(hào),回復(fù)“后端面試”,送你一份Java面試題寶典.pdf

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

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

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

    3、配置 applicationContext.xml

  • 導(dǎo)入aop(約束)命名空間

  • 配置目標(biāo)對(duì)象

  • 配置通知對(duì)象

  • 配置將通知織入目標(biāo)對(duì)象

  • 4、測(cè)試

    總結(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ì)象,開(kāi)啟使用注解完成織入

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

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

    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)?#64;Before注解的方法入?yún)⒉荒軅鱌roceedingJoinPoint,而只能傳入JoinPoint。要知道從aop走到核心代碼就是通過(guò)調(diào)用ProceedingJionPoint的proceed()方法。而JoinPoint沒(méi)有這個(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即可。

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

    測(cè)試:

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

    事務(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ā)訪問(wèn)數(shù)據(jù)庫(kù)時(shí),比如操作同一張表時(shí),數(shù)據(jù)庫(kù)為每一個(gè)用戶開(kāi)啟的事務(wù),不能被其他事務(wù)的操作所干擾,多個(gè)并發(fā)事務(wù)之間要相互隔離。

    即要達(dá)到這么一種效果:對(duì)于任意兩個(gè)并發(fā)的事務(wù)T1和T2,在事務(wù)T1看來(lái),T2要么在T1開(kāi)始之前就已經(jīng)結(jié)束,要么在T1結(jié)束之后才開(kāi)始,這樣每個(gè)事務(wù)都感覺(jué)不到有其他事務(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èn)題,也必須要將我們的事務(wù)完全執(zhí)行完成,否則就會(huì)造成我們看到提示事務(wù)處理完畢,但是數(shù)據(jù)庫(kù)因?yàn)楣收隙鴽](méi)有執(zhí)行事務(wù)的重大錯(cuò)誤。

    關(guān)于事務(wù)的隔離級(jí)別:https://blog.csdn.net/itcats_cn/article/details/81487466

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

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

    編程式事務(wù)控制

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

    Jdbc代碼:

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

    Hibernate代碼:

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

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

    (比較靈活,但開(kāi)發(fā)起來(lái)比較繁瑣:每次都要開(kā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ù)控制,則開(kāi)啟事務(wù)后一定要手動(dòng)釋放(提交或回滾),否則長(zhǎng)期占用內(nèi)存,有可能報(bào)事務(wù)異常

    spring封裝了事務(wù)管理的代碼(打開(kāi),提交,回滾事務(wù))

    事務(wù)操作對(duì)象,因?yàn)樵诓煌脚_(tái),操作事務(wù)的代碼各不相同.spring提供了一個(gè)接口

    PlatformTransactionManager 接口

    在不同平臺(tái),實(shí)現(xiàn)不同的接口即可

    注意:在spring中玩事務(wù)管理.最為核心的對(duì)象就是TransactionManager對(duì)象

    spring管理事務(wù)的屬性介紹

    • 事務(wù)的隔離級(jí)別

    • 是否只讀

    • 事務(wù)的傳播行為

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

    xml中配置通知

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

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

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

    @Transactional(isolation=Isolation.REPEATABLE_READ,readOnly=false,propagation=Propagation.REQUIRED) 推薦文章
    • 14個(gè)項(xiàng)目!

    • 一款小清新的 SpringBoot+ Mybatis 前后端分離后臺(tái)管理系統(tǒng)項(xiàng)目

    • 47K Star 的SpringBoot+MyBatis+docker電商項(xiàng)目,附帶超詳細(xì)的文檔!

    • 寫(xiě)博客能月入10K?

    • 一款基于 Spring Boot 的現(xiàn)代化社區(qū)(論壇/問(wèn)答/社交網(wǎng)絡(luò)/博客)

    更多項(xiàng)目源碼
    • 這或許是最美的Vue+Element開(kāi)源后臺(tái)管理UI

    • 推薦一款高顏值的 Spring Boot 快速開(kāi)發(fā)框架

    • 一款基于 Spring Boot 的現(xiàn)代化社區(qū)(論壇/問(wèn)答/社交網(wǎng)絡(luò)/博客)

    • 13K點(diǎn)贊都基于 Vue+Spring 前后端分離管理系統(tǒng)ELAdmin,大愛(ài)

    • 想接私活時(shí)薪再翻一倍,建議根據(jù)這幾個(gè)開(kāi)源的SpringBoot

    總結(jié)

    以上是生活随笔為你收集整理的大佬把Spring框架总结的「无比详细」,不信你学不会!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。