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

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

使用 AOP 來維護(hù)遺留 Java 應(yīng)用程序

2019-11-18 13:46:10
字體:
供稿:網(wǎng)友

  處理復(fù)雜和不熟悉 java 代碼的技術(shù)
級(jí)別:中級(jí)


Abhijit Belapurkar(abhijit_belapurkar@infosys.com)
高級(jí)技術(shù)架構(gòu)師,Infosys Technologies Limited
2004 年 3 月

假如您曾經(jīng)接管并且必須維護(hù)某個(gè)基于 Java 的應(yīng)用程序,那么本文就是為您預(yù)備的。作者 Abhijit Belapurkar 將向您展示如何使用面向方面編程(aspect-oriented PRogramming,AOP)來對(duì)即使最不透明的遺留應(yīng)用程序獲得前所未有的見解。
軟件系統(tǒng)通常從一組有限的得到良好理解的需求開始。然而,隨著大多數(shù)成功系統(tǒng)的演進(jìn),它們承擔(dān)起越來越多的需求,體現(xiàn)在無數(shù)的功能和非功能性方面。在一個(gè)企業(yè)環(huán)境中,您最終很輕易向這個(gè)混亂的模塊組合添加許多第三方庫和框架,它們?nèi)急舜私换ィ⒃谙到y(tǒng)日常工作的表面之下相互配合。實(shí)際上,用不了多少年,最初具有很簡(jiǎn)單、可治理的需求集的系統(tǒng)就會(huì)變成龐然大物:難于控制和笨拙的代碼。

于是步入這種環(huán)境的 Java 開發(fā)人員就有了一個(gè)日常維護(hù)和改進(jìn)的新任務(wù)。假如您就是這個(gè)開發(fā)人員,那么您的第一個(gè)任務(wù)就是深刻理解該系統(tǒng)的結(jié)構(gòu)。理解結(jié)構(gòu)將是增強(qiáng)系統(tǒng)和診斷不可避免會(huì)發(fā)生的問題的要害。當(dāng)然,第一次探究任何未知的系統(tǒng)都是說起來輕易做起來難。在某些情況下,您能夠咨詢?cè)鹊拈_發(fā)人員,而在其他情況下卻不能。但是即使能夠找到原先的開發(fā)團(tuán)隊(duì),有些系統(tǒng)也會(huì)因?yàn)樘^龐大,而無法在沒有機(jī)械幫助下熟悉和理解它。

雖然有許多可用的工具能夠幫助您理解復(fù)雜的程序(請(qǐng)參閱 參考資料),但是大多數(shù)工具都很昂貴、學(xué)習(xí)起來很耗時(shí)間,并且功能范圍有限(也就是說,假如該工具無法滿足需要,您將求助無門)。在本文中,我將建議一種替代的方法。面向方面編程是成熟的編程范型,它可以應(yīng)用于廣泛的編程場(chǎng)景,包括遺留應(yīng)用程序的理解和維護(hù)。

請(qǐng)注重,本文假設(shè)您大致熟悉 ASPectJ 之下的 AOP,非凡是 ASPectJ 的靜態(tài)和動(dòng)態(tài)橫切技術(shù)。雖然我將在下一節(jié)提供關(guān)于 AOP 橫切的簡(jiǎn)要概述,但是您應(yīng)該參考 參考資料,獲取更多信息。

總體概述
基于 Java 的 AOP 使用了靈活而豐富的表達(dá)語言,您可以使用它以近乎無限種方式來分解復(fù)雜的應(yīng)用程序。基于 Java 的 AOP 的語法類似于 Java 語言,您應(yīng)該很輕易就會(huì)把握它。一旦把握,AOP 就是一種具有許多應(yīng)用的編程技術(shù)。除了理解遺留系統(tǒng)內(nèi)部細(xì)節(jié)外,您還可以使用 AOP 來非強(qiáng)制性地重構(gòu)和增強(qiáng)這樣的系統(tǒng)。雖然本文將完全使用 ASPectJ,不過這里討論的大多數(shù)技術(shù)都可移植到其他流行的基于 Java 的 AOP 實(shí)現(xiàn),比如 ASPectWerkz 和 JBossAOP(請(qǐng)參閱 參考資料)。

關(guān)于橫切
任何應(yīng)用程序都由多個(gè)功能性和系統(tǒng)性關(guān)注點(diǎn)(concern)組成。功能性 關(guān)注點(diǎn)與應(yīng)用程序的日常使用相關(guān),而 系統(tǒng)性 關(guān)注點(diǎn)則與系統(tǒng)的整體健康和維護(hù)相關(guān)。例如,一個(gè)銀行應(yīng)用程序的功能性關(guān)注點(diǎn)包括賬戶維護(hù)和答應(yīng)借/貸操作,它的系統(tǒng)性關(guān)注點(diǎn)包括安全、事務(wù)、性能和審計(jì)日志記錄。即使使用最好的編程方法學(xué)來開發(fā)應(yīng)用程序,您最終也會(huì)發(fā)現(xiàn)它的功能性和系統(tǒng)性關(guān)注點(diǎn)會(huì)以跨越多個(gè)應(yīng)用程序模塊的形式相互混雜在一起。

橫切 是一種 AOP 技術(shù),用于確保獨(dú)立的關(guān)注點(diǎn)保持模塊化,同時(shí)仍然足夠靈活地在整個(gè)應(yīng)用程序中的不同點(diǎn)應(yīng)用。橫切包括靜態(tài)和動(dòng)態(tài)兩種類別。動(dòng)態(tài)橫切 體現(xiàn)為通過在感愛好的特定點(diǎn)織入(weave in)新的行為來改變對(duì)象的執(zhí)行行為。靜態(tài)橫切 答應(yīng)我們通過注入(inject in)附加的方法和/或?qū)傩詠碇苯痈淖儗?duì)象的結(jié)構(gòu)。

靜態(tài)橫切的語法與動(dòng)態(tài)橫切很不相同。以下術(shù)語適用于動(dòng)態(tài)橫切:


連接點(diǎn)(join point)是 Java 程序中的某個(gè)特定執(zhí)行點(diǎn),比如某個(gè)類中的一個(gè)方法。


切入點(diǎn)(pointcut)是特定于語言的結(jié)構(gòu),它表示或捕捉某個(gè)特定的連接點(diǎn)。


通知(advice)是在到達(dá)某個(gè)特定的切入點(diǎn)時(shí)要執(zhí)行的一段代碼(通常是一個(gè)橫切功能)。


方面(ASPect)是定義切入點(diǎn)和通知以及它們之間的映射的一個(gè)結(jié)構(gòu)。方面由 AOP 編譯器用來在現(xiàn)有對(duì)象中的特定執(zhí)行點(diǎn)織入附加功能。

本文中的所有代碼演示都將利用動(dòng)態(tài)橫切。請(qǐng)參閱 參考資料,獲得關(guān)于靜態(tài)橫切的更多信息。

ASPectJ 之下的 AOP
為了學(xué)習(xí)本文中的例子,您應(yīng)該熟悉以下特定于 ASPectJ 之下的 AOP 的特性。


ASPectJ 提供一個(gè)名為 ajc 的編譯器/字節(jié)代碼織入器,它編譯 ASPectJ 和 Java 語言文件。ajc 根據(jù)需要將方面交織在一起,以產(chǎn)生與任何 Java 虛擬機(jī)(1.1 或更高版本)相容的 .class 文件。


ASPectJ 支持如下這樣的方面,即這些方面規(guī)定某個(gè)特定的連接點(diǎn)應(yīng)該永遠(yuǎn)不會(huì)到達(dá)。假如 ajc 進(jìn)程判定出情況不是這樣,它將發(fā)出一個(gè)編譯時(shí)警告或錯(cuò)誤(具體取決于該方面)。

應(yīng)用程序和系統(tǒng)分析
在下面幾節(jié)中,您將學(xué)習(xí)兩種使用 AOP 的不同的應(yīng)用程序和系統(tǒng)分析機(jī)制。第一種機(jī)制我稱之為 靜態(tài)分析,它要求您做以下事情:

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 集安市| 天镇县| 孟连| 渝中区| 广平县| 新乡市| 武义县| 班戈县| 萝北县| 大英县| 凭祥市| 民县| 潮安县| 保靖县| 鄂托克旗| 巴马| 德化县| 额济纳旗| 刚察县| 绵竹市| 勃利县| 西乌| 茌平县| 息烽县| 嘉荫县| 南平市| 舒城县| 乐至县| 布尔津县| 辉南县| 镇宁| 嘉义市| 乌恰县| 峡江县| 德江县| 乌海市| 来宾市| 秀山| 四会市| 双城市| 招远市|