国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

Spring框架與AOP思想的研究與應(yīng)用

2019-11-18 11:17:16
字體:
供稿:網(wǎng)友
摘要 本文對SPRing框架中所包含的AOP思想以及事務(wù)治理進行了分析,并通過對一個業(yè)務(wù)對象實現(xiàn)加鎖/解鎖的操作,說明了動態(tài)代理模式的可行性與有效性。

  要害詞 AOP;橫切關(guān)注點;控制反轉(zhuǎn);動態(tài)代理

  引言

  aspect Oriented Programming(AOP)是近年來計算機技術(shù)中比較熱門的話題之一。其發(fā)展歷史從學術(shù)領(lǐng)域和研發(fā)機構(gòu)的運用開始,目前流行的Spring應(yīng)用程序框架將AOP思想融入了整個框架的設(shè)計開發(fā)與應(yīng)用當中。使用Spring框架固然給我們的編程帶來了好處與便利,但是同時存在著一個問題,對于初學者來說,所謂的“控制反轉(zhuǎn)”,不是一個能夠望文生義的好名稱,“依靠注入”也是一樣,也正是因為這樣,不少初學者很難在短時間內(nèi)理解和把握這些名字和他們的用法,而要使用AOP的功能也需要理解AOP,也比較難。基于以上原因,我們就會想到,能否簡單地將Spring框架中運用到的優(yōu)秀的理念,巧妙的運用到我們需要使用的地方,而又繞過不輕易上手的Spring框架,做到一舉兩得呢?本文就將圍繞著上述提出的問題給出作者的看法和觀點。

  AOP思想與面向方面的編程

  AOP實際是GoF四人組設(shè)計模式的一種擴展,設(shè)計模式所追求的是降低代碼之間的耦合度,增加程序的靈活性和可重用性,AOP實際上就是設(shè)計模式所追求的目標的一種實現(xiàn)。所謂的分離關(guān)注就是將某一通用的需求功能從不相關(guān)的類之中分離出來;同時,能夠使得很多類共享一個行為,一旦行為發(fā)生變化,不必修改很多類,只要修改這個行為就可以。AOP就是這種實現(xiàn)分散關(guān)注的編程方法,它將“關(guān)注”封裝在“方面”中。

  面向?qū)ο蟮木幊蹋∣OP)方法是在面向過程的編程方法基礎(chǔ)上進行的改進,而面向方面編程(AOP)方法又是在面向?qū)ο缶幊蹋∣OP)方法的基礎(chǔ)上進行改進而來的一種創(chuàng)新的軟件開發(fā)方法。AOP和OOP雖然在字面上十分相似,但是卻是面向不同領(lǐng)域的兩種設(shè)計思想。OOP(面向?qū)ο缶幊蹋┽槍栴}領(lǐng)域中以及業(yè)務(wù)處理過程中存在的實體及其屬性和操作進行抽象和封裝,面向?qū)ο蟮暮诵母拍钍强v向結(jié)構(gòu)的,其目的是獲得更加清楚高效的邏輯單元劃分;而AOP則是針對業(yè)務(wù)處理過程中的切面進行提取,例如,某一個操作在各個模塊中都有涉及,這個操作就可以看成“橫切”存在于系統(tǒng)當中。在許多情況下,這些操作都是與業(yè)務(wù)邏輯相關(guān)性不強或者不屬于邏輯操作的必須部分,而面向?qū)ο蟮姆椒ê茈y對這種情況做出處理。AOP則將這些操作與業(yè)務(wù)邏輯分離,使程序員在編寫程序時可以專注于業(yè)務(wù)邏輯的處理,而利用AOP將貫穿于各個模塊間的橫切關(guān)注點自動耦合進來。AOP所面對的是處理過程中的某個步驟或階段,對不同的階段領(lǐng)域加以隔離,已獲得邏輯過程中各部分之間低耦合性的隔離效果,其與面向方面編程在目標上有著本質(zhì)的差異。AOP的核心思想就是將應(yīng)用程序中的業(yè)務(wù)邏輯處理部分同對其提供支持的通用服務(wù),即所謂的“橫切關(guān)注點”進行分離,這些“橫切關(guān)注點”貫穿了程序中的多個縱向模塊的需求。

  使用AOP機制進行開發(fā),首先要對方面進行了解,將需求分解成一般關(guān)注點和橫切關(guān)注點,即將核心模塊級的關(guān)注點和系統(tǒng)級的橫切關(guān)注點分離;然后各自獨立的實現(xiàn)這些關(guān)注點;最后用工具將業(yè)務(wù)邏輯代碼和橫切關(guān)注點代碼編織到一起,形成最終的程序。通過面向方面的編程可以減少編碼時間和重復。

  目前已經(jīng)形成的Spring框架

  1、Spring框架的特點

  Spring框架目前如此流行,一方面的原因在于Spring提供了一套全面并且十分成熟的輕型應(yīng)用程序基本框架,并且對復雜的應(yīng)用開發(fā)提供了有力的支持。除此之外,從實際應(yīng)用開發(fā)角度來看,Spring最大的優(yōu)勢在于它是從實際項目開發(fā)經(jīng)驗中抽取的,其提供了豐富的類庫,可大大節(jié)省編碼量,它是一種高效的、可高度重用的應(yīng)用框架。Spring框架中目前最吸引人也是該應(yīng)用框架最具特色的地方就是名為控制反轉(zhuǎn)(IOC=Inverse Of Control)或者依靠注入(DI=Dependence Injection)的設(shè)計思想,這是一種相當優(yōu)秀的設(shè)計思想,即“好萊塢”原則:不用你主動來找我,我會通知你。但是,僅僅憑借著這樣一個單純的設(shè)計模式并不能使得Spring如此成功,Spring最成功的地方,還是目前使用最為廣泛的AOP應(yīng)用,也就是Spring中基于AOP實現(xiàn)的業(yè)務(wù)治理機制,也正是由于這一點,使得Spring AOP成為應(yīng)用框架中極其閃光的一個亮點。

  2、AOP思想在Spring框架中的體現(xiàn)

  文章前面已經(jīng)講述了AOP的概念以及什么叫做所謂的“橫切”關(guān)注點,事務(wù)治理就是J2EE應(yīng)用中一個橫切多個對象的橫切關(guān)注點的例子。

  2.1 事務(wù)治理

  對于J2EE應(yīng)用程序而言,事務(wù)的處理一般有兩種模式:依靠特定事務(wù)資源的事務(wù)處理與依靠容器的參數(shù)化事務(wù)治理。在這里我們略去對第一種處理方式的說明,直接對第二種方式,即依靠容器的參數(shù)化事務(wù)治理來闡述筆者的觀點。

  Spring事務(wù)治理究竟能帶給我們什么?

  了解Spring的人們都知道,對于傳統(tǒng)的基于事務(wù)資源的事務(wù)處理而言,Spring并不會產(chǎn)生什么影響,我們照樣可以成功編寫并且運行這樣的代碼。

  對于依靠容器的參數(shù)化事務(wù)治理而言,Spring則可以用來幫助實現(xiàn)對事務(wù)的治理而無須使用EJB。Spring本身也是一個容器,只是相對EJB容器所要付出的代價而言,Spring屬于輕量級容器,它能夠替代EJB,通過使用AOP來提供聲明式事務(wù)治理,即可通過Spring實現(xiàn)基于容器的事務(wù)治理(從本質(zhì)上來講,Spring的事務(wù)治理是基于動態(tài)AOP)。Spring與EJB最大的區(qū)別在于:第一,Spring可以為任意的java Class實現(xiàn)事務(wù)治理而無須轉(zhuǎn)換成標準的EJB;第二,Spring事務(wù)治理并不依靠特定的事務(wù)資源從而使得系統(tǒng)的應(yīng)用與部署更佳靈活。

  2.2動態(tài)代理機制的實現(xiàn)

  Spring框架中所提供的AOP支持,是基于動態(tài)AOP機制實現(xiàn)的,即通過動態(tài)Proxy模式,在目標對象的方法調(diào)用前后插入相應(yīng)的處理代碼。AOP代理可以是基于JDK動態(tài)代理,也可以是基于CGLIB代理。Spring默認使用的是基于Java Dynamic Proxy模式實現(xiàn),這樣任何的接口都能被代理。基于Spirng框架的應(yīng)用程序開發(fā),程序員會有一種自然的傾向性來實現(xiàn)面向接口編程而不是類,業(yè)務(wù)對象通常也是實現(xiàn)一個或者多個接口,這也是一種良好的編程習慣。Spring也可以基于CGLIB實現(xiàn)AOP代理,這樣所代理的是類而不是接口。假如一個業(yè)務(wù)對象沒有實現(xiàn)某一個接口,那么CGLIB將被使用。

  我們先來分析一下Spring事務(wù)治理機制的實現(xiàn)原理。由于Spring內(nèi)置AOP默認使用動態(tài)代理模式實現(xiàn),我們就先來分析一下動態(tài)代理模式的實現(xiàn)方法。動態(tài)代理模式的核心就在于代碼中不出現(xiàn)與具體應(yīng)用層相關(guān)聯(lián)的接口或者類引用,如上所說,這個代理類適用于任何接口的實現(xiàn)。下面我們來看一個例子。 public class TxHandler implements InvocationHandler {



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 泸溪县| 泸州市| 榆树市| 舟山市| 南通市| 根河市| 依兰县| 莱芜市| 鹤岗市| 宁晋县| 赫章县| 察哈| 扬中市| 兴山县| 阳朔县| 林甸县| 施秉县| 五莲县| 左贡县| 孝昌县| 刚察县| 虹口区| 泰宁县| 沂源县| 普定县| 潞西市| 金阳县| 千阳县| 遵化市| 彭阳县| 全州县| 龙海市| 阿坝| 新田县| 阿拉善盟| 东兰县| 合作市| 大宁县| 夏河县| 临沧市| 达孜县|