都说声明式事务管理是基于AOP的 但是我不明白 我调用我的代码 spring是怎么插一杠子 加上事务
生活随笔
收集整理的這篇文章主要介紹了
都说声明式事务管理是基于AOP的 但是我不明白 我调用我的代码 spring是怎么插一杠子 加上事务
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
前面幾位基本都回答了,AOP的底層實(shí)現(xiàn)就是設(shè)計(jì)模式的代理模式,建議去了解下這種設(shè)計(jì)模式
關(guān)鍵字:動(dòng)態(tài)代理.多學(xué)習(xí)如何利用搜索引擎獲取知識
前段時(shí)間剛好寫過一篇文章,《Spring AOP的實(shí)現(xiàn)原理》。
關(guān)鍵點(diǎn)在于控制扭轉(zhuǎn)上,正常的程序控制是有由你,也就是編程者進(jìn)行的。而控制扭轉(zhuǎn)后,實(shí)際上程序的控制著是實(shí)現(xiàn)控制扭轉(zhuǎn)的框架,這里就是Spring。所以你有一個(gè)很關(guān)鍵的誤解,就是我調(diào)用我的代碼。實(shí)際上調(diào)用你代碼的不是你,而是框架,既然調(diào)用你程序的是框架,那它自然就有機(jī)會(huì)去查詢你的代碼里是否有面向切面的配置,如果有,它也有機(jī)會(huì)去執(zhí)行這些配置。
真正跑的實(shí)例對象已經(jīng)不是你寫的那個(gè)類的對象了,它加了一層殼,而這個(gè)殼就有執(zhí)行額外代碼的功能,比如事務(wù)管理,這層殼是spring根據(jù)配置幫你加上去的。這就是aop帶來的好處,你寫了核心代碼,然后寫一個(gè)額外的功能代碼(增強(qiáng)),你要把它放到功能代碼里執(zhí)行,spring會(huì)幫你動(dòng)態(tài)的織入放配置的切點(diǎn)而你無需去修改的的核心代碼,哪里不會(huì)點(diǎn)哪里,麻麻再也不用擔(dān)心耦合度高了!你可以了解一下動(dòng)態(tài)代理的知識,你就明白了。如果不理解這樣的好處,等你代碼寫多了就知道了
講的白話一點(diǎn)就是在運(yùn)行時(shí)在你的程序前后增加了事務(wù)的代碼。這個(gè)很好理解,你可以試試如果你的bean對象沒有放置在ioc容器中管理時(shí)是不會(huì)有事務(wù)控制的。為什么spring提倡面向接口編程呢,其實(shí)就是在程序運(yùn)行時(shí),動(dòng)態(tài)生成接口的子類,在di依賴注入時(shí)的對象是由spring動(dòng)態(tài)生成的(代理對象),而不是你創(chuàng)建的那個(gè)bean。在生成的代碼中調(diào)用實(shí)際的bean對象,在前面增加公共的代碼。打個(gè)斷點(diǎn)看看線程堆棧一目了然。
關(guān)鍵字:動(dòng)態(tài)代理.多學(xué)習(xí)如何利用搜索引擎獲取知識
前段時(shí)間剛好寫過一篇文章,《Spring AOP的實(shí)現(xiàn)原理》。
關(guān)鍵點(diǎn)在于控制扭轉(zhuǎn)上,正常的程序控制是有由你,也就是編程者進(jìn)行的。而控制扭轉(zhuǎn)后,實(shí)際上程序的控制著是實(shí)現(xiàn)控制扭轉(zhuǎn)的框架,這里就是Spring。所以你有一個(gè)很關(guān)鍵的誤解,就是我調(diào)用我的代碼。實(shí)際上調(diào)用你代碼的不是你,而是框架,既然調(diào)用你程序的是框架,那它自然就有機(jī)會(huì)去查詢你的代碼里是否有面向切面的配置,如果有,它也有機(jī)會(huì)去執(zhí)行這些配置。
真正跑的實(shí)例對象已經(jīng)不是你寫的那個(gè)類的對象了,它加了一層殼,而這個(gè)殼就有執(zhí)行額外代碼的功能,比如事務(wù)管理,這層殼是spring根據(jù)配置幫你加上去的。這就是aop帶來的好處,你寫了核心代碼,然后寫一個(gè)額外的功能代碼(增強(qiáng)),你要把它放到功能代碼里執(zhí)行,spring會(huì)幫你動(dòng)態(tài)的織入放配置的切點(diǎn)而你無需去修改的的核心代碼,哪里不會(huì)點(diǎn)哪里,麻麻再也不用擔(dān)心耦合度高了!你可以了解一下動(dòng)態(tài)代理的知識,你就明白了。如果不理解這樣的好處,等你代碼寫多了就知道了
講的白話一點(diǎn)就是在運(yùn)行時(shí)在你的程序前后增加了事務(wù)的代碼。這個(gè)很好理解,你可以試試如果你的bean對象沒有放置在ioc容器中管理時(shí)是不會(huì)有事務(wù)控制的。為什么spring提倡面向接口編程呢,其實(shí)就是在程序運(yùn)行時(shí),動(dòng)態(tài)生成接口的子類,在di依賴注入時(shí)的對象是由spring動(dòng)態(tài)生成的(代理對象),而不是你創(chuàng)建的那個(gè)bean。在生成的代碼中調(diào)用實(shí)際的bean對象,在前面增加公共的代碼。打個(gè)斷點(diǎn)看看線程堆棧一目了然。
總結(jié)
以上是生活随笔為你收集整理的都说声明式事务管理是基于AOP的 但是我不明白 我调用我的代码 spring是怎么插一杠子 加上事务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。