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