亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

java框架之AOP框架

瀏覽:12日期:2024-06-30 11:03:54
內(nèi)容: 一般情況下,對象是由一行行的代碼“粘合在一起的。創(chuàng)建這個對象。創(chuàng)建那個對象。為那個對象(其值為這個對象)設置屬性。其間還點綴著一些用戶數(shù)據(jù)。將一切攪拌在一起。這是現(xiàn)代程序員在進行設計和編碼時經(jīng)常做的事情。 將多個這樣的類組合起來形成具有一定功能的組件,而很多這樣的組件以這種方式連接起來會出現(xiàn)這樣的問題:要實現(xiàn)不同的方法時,需要花費大量時間編寫同樣的代碼。這些代碼行中往往會有以下操作:將這個方法的活動記錄日志到一個文件中以備調試,運行安全性檢查,啟動一個事務,打開一個數(shù)據(jù)庫連接,記住捕捉 C++ 異常或者 Win32 結構化異常以轉換為 COM 異常,還要驗證參數(shù)。而且,還要切記在方法執(zhí)行完之后銷毀方法開始時的設置。還有很多的事務機制、安全機制以及對象池或線程池等性能優(yōu)化機制。 這種重復代碼經(jīng)常出現(xiàn)的原因在于,開發(fā)人員被訓練為根據(jù)軟件項目需求中的名詞來設計系統(tǒng)。如果設計的是銀行系統(tǒng),Account類和Customer 類必不可少,它們都將自己獨特的詳細信息收集到一處,但是它們的每個方法也都需要進行日志、安全檢查、事務管理等操作。區(qū)別在于,日志等操作是一些與特定應用無關的系統(tǒng)方面。 這些功能機制是每個應用系統(tǒng)幾乎都需要的,因此可以從具體應用系統(tǒng)中分離出來,形成一個通用的框架平臺,而且,這些功能機制的設計開發(fā)有一定難度,同時運行的穩(wěn)定性和快速性都非常重要,必須經(jīng)過長時間調試和運行經(jīng)驗積累而成。  這樣,我們已經(jīng)有了一種分散關注的思路(separation of concerns)。 將通用需求功能從不相關類之中分離出來;同時,能夠使得很多類共享一個行為,一旦行為發(fā)生變化,不必修改很多類,只要修改這個行為就可以。這就是分散關注(separation of concerns)。 AOP就是這種實現(xiàn)分散關注的編程方法,它將“關注封裝在“方面中。 面向方面編程 (AOP) 是施樂公司帕洛阿爾托研究中心 (Xerox PARC) 在20世紀 90 年代發(fā)明的一種編程范式,它使開發(fā)人員可以更好地將本不該彼此糾纏在一起的任務(例如數(shù)學運算和異常處理)分離開來。 AOP 方法有很多優(yōu)點。首先,由于操作更為簡潔,所以改進了性能。其次,它使程序員可以花費更少的時間重寫相同的代碼。總之,AOP 能夠為不同過程提供更好的封裝性,提高未來的互操作性。 是什么使軟件工程師都希望自己能成為硬件工程師呢?自從函數(shù)發(fā)明以來,程序員花費了大量時間(及其老板的大多數(shù)資金)試圖設計這樣的系統(tǒng):它們不過是一些組合模型,由其他人創(chuàng)建的部件構成,布置成獨特的形狀,再覆蓋上一些悅目的顏色。函數(shù)、模板、類、組件等等一切,都是軟件工程師自己創(chuàng)建“軟件集成電路(模擬硬件設計師的電子器件)的種種嘗試。 我把這些都歸咎于 Lego(樂高玩具)。把兩個玩具塊(即組件)拼起時發(fā)出的悅耳的咔噠聲很讓人上癮,會促使許多程序員發(fā)明一種又一種新的封裝和重用的新機制。這方面最新的進展就稱為面向方面編程 (AOP) 。 AOP 的核心是安排(一個摞在另一個之上)組件的一種方式,可以獲得其他種類基于組件的開發(fā)方法無法得到的重用級別。這種安排是在客戶端和對象之間的調用堆棧中進行的,其結果是為對象創(chuàng)建了一種特定的環(huán)境。這種環(huán)境正是 AOP 程序員主要追求的東西。 AOP是什么? AOP是OOP的延續(xù),是Aspect Oriented Programming的縮寫,意思是面向方面編程。AOP實際是GoF設計模式的延續(xù),設計模式孜孜不倦追求的是調用者和被調用者之間的解耦,AOP可以說也是這種目標的一種實現(xiàn)。舉例:假設有在一個應用系統(tǒng)中,有一個共享的數(shù)據(jù)必須被并發(fā)同時訪問,首先,將這個數(shù)據(jù)封裝在數(shù)據(jù)對象中,稱為Data Class,同時,將有多個訪問類,專門用于在同一時刻訪問這同一個數(shù)據(jù)對象。為了完成上述并發(fā)訪問同一資源的功能,需要引入鎖Lock的概念,也就是說,某個時刻,當有一個訪問類訪問這個數(shù)據(jù)對象時,這個數(shù)據(jù)對象必須上鎖Locked,用完后就立即解鎖unLocked,再供其它訪問類訪問。使用傳統(tǒng)的編程習慣,我們會創(chuàng)建一個抽象類,所有的訪問類繼承這個抽象父類,如下: abstract class Worker{ abstract void locked(); abstract void accessDataObject(); abstract void unlocked();}這樣做的缺點: accessDataObject()方法需要有“鎖狀態(tài)之類的相關代碼。 Java只提供了單繼承,因此具體訪問類只能繼承這個父類,如果具體訪問類還要繼承其它父類,比如另外一個如Worker的父類,將無法方便實現(xiàn)。重用被打折扣,具體訪問類因為也包含“鎖狀態(tài)之類的相關代碼,只能被重用在相關有“鎖的場合,重用范圍很窄。 仔細研究這個應用的“鎖,它其實有下列特性: “鎖功能不是具體訪問類的首要或主要功能,訪問類主要功能是訪問數(shù)據(jù)對象,例如讀取數(shù)據(jù)或更改動作。 “鎖行為其實是和具體訪問類的主要功能可以獨立、區(qū)分開來的。 “鎖功能其實是這個系統(tǒng)的一個縱向切面,涉及許多類、許多類的方法。 因此,一個新的程序結構應該是關注系統(tǒng)的縱向切面,例如這個應用的“鎖功能,這個新的程序結構就是aspect(方面)。在這個應用中,“鎖方面(aspect)應該有以下職責:提供一些必備的功能,對被訪問對象實現(xiàn)加鎖或解鎖功能。以保證所有在修改數(shù)據(jù)對象的操作之前能夠調用lock()加鎖,在它使用完成后,調用unlock()解鎖。 什么是方面? 在考慮對象及對象與其他對象的關系時,我們通常會想到繼承這個術語。例如,定義某一個抽象類 — Dog 類。在標識相似的一些類但每個類又有各自的獨特行為時,通常使用繼承來擴展功能。舉例來說,如果標識了 Poodle,則可以說一個 Poodle 是一個 Dog,即 Poodle 繼承了 Dog。到此為止都似乎不錯,但是如果定義另一個以后標識為 Obedient Dog 的獨特行為又會怎樣呢?當然,不是所有的 Dogs 都很馴服,所以 Dog 類不能包含 obedience 行為。此外,如果要創(chuàng)建從 Dog 繼承的 Obedient Dog 類,那么 Poodle 放在這個層次結構中的哪個位置合適呢?Poodle 是一個 Dog,但是 Poodle 不一定 obedient;那么 Poodle 是繼承于 Dog 還是 Obedient Dog 呢?都不是,我們可以將馴服看作一個方面,將其應用到任何一類馴服的 Dog,我們反對以不恰當?shù)姆绞綇娭茖⒃撔袨榉旁?Dog 層次結構中。 在軟件術語中,面向方面的編程能夠獨立于任何繼承層次結構而應用改變類或對象行為的方面。然后,在運行時或編譯時應用這些方面。舉一個關于 AOP 的示例,然后進行描述,說明起來比較容易。首先,定義四個關鍵的 AOP 術語,這很重要,因為我將反復使用它們: • 接合點 (Joinpoint) — 代碼中定義明確的可識別的點。 • 切點 (Pointcut) — 通過配置或編碼指定接合點的一種方法。 • 通知 (Advice) — 表示需要執(zhí)行交叉切割動作的一種方法 • 混入 (Mixin) — 通過將一個類的實例混入目標類的實例引入新行為。 為了更好地理解這些術語,可以將接合點看作程序流中定義好的一點。說明接合點的一個很好的示例是:在代碼調用一個方法時,發(fā)生調用的那一點被認為是一個接合點。 切點用于指定或定義希望在程序流中截獲的接合點。切點還包含一個通知,該通知在到達接合點時發(fā)生。因此,如果在一個調用的特定方法上定義一個切點,那么在調用該方法或接合點時,AOP 框架將截獲該切點,同時還將執(zhí)行切點的通知。 通知有幾種類型,但是最常見的情況是將其看作要調用的另一個方法。在調用一個帶有切點的方法時,要執(zhí)行的通知將是另一個要調用的方法。要調用的這個通知或方法可以是對象中被截獲的方法,也可以是混入的另一個對象中的方法。 AOP有必要嗎?當然,上述應用范例在沒有使用AOP情況下,也得到了解決,例如JBoss 3.XXX也提供了上述應用功能,但是沒有使用AOP。但是,使用AOP可以讓我們從一個更高的抽象概念來理解軟件系統(tǒng),AOP也許提供一種有價值的工具。可以這么說:因為使用AOP結構,現(xiàn)在JBoss 4.0的源碼要比JBoss 3.X容易理解多了,這對于一個大型復雜系統(tǒng)來說是非常重要的。從另外一個方面說,好像不是所有的人都需要關心AOP,它可能是一種架構設計的選擇,如果選擇J2EE系統(tǒng),AOP關注的上述通用方面都已經(jīng)被J2EE容器實現(xiàn)了,J2EE應用系統(tǒng)開發(fā)者可能需要更多地關注行業(yè)應用方面aspect。 AOP具體實現(xiàn)AOP是一個概念,并沒有設定具體語言的實現(xiàn),它能克服那些只有單繼承特性語言的缺點(如Java),將 AOP 用于多數(shù)大型系統(tǒng)或關鍵的生產(chǎn)系統(tǒng)還不完全成熟,但是隨著語言支持的提高,AOP 的應用將更容易。另外,提高支持也是新的軟件開發(fā)范例,例如利用面向方面的編程的軟件工廠。目前有幾種可用的 AOP 框架,每個框架都有其自己的方法、正面屬性和負面屬性。 目前AOP具體實現(xiàn)有以下幾個項目:•AspectJ (TM) : 創(chuàng)建于Xerox PARC. 有近十年歷史,成熟缺點:過于復雜;破壞封裝;需要專門的Java編譯器。•動態(tài)AOP:使用JDK的動態(tài)代理API或字節(jié)碼Bytecode處理技術。基于動態(tài)代理API的具體項目有:JBoss 4.0 JBoss 4.0服務器 JAC (Java Aspect Components) — 是一個應用服務器。它為Java2平臺、用于Java開發(fā)的企業(yè)開發(fā)環(huán)境(J2EE)、和基于Web的分布式應用,提供開放式資源的又一個選擇(在GNU次常規(guī)公共許可證下發(fā)布)。JAC包括統(tǒng)一模型語言(UML)IDE,該UML IDE模塊化應用商業(yè)邏輯并且自動生成和編譯純商業(yè)邏輯Java類。這些類,在JAC容器內(nèi)執(zhí)行,可從一組技術和/或商業(yè)的橫切關系(crosscutting concerns)如:數(shù)據(jù)持久性、認證、配置文件管理、訪問權限檢測、演示、和負載平衡中無縫地受益。基于面向方面編程技術(AOP)的JAC將這些關系( concerns)從應用程序的核心商業(yè)邏輯中分離出來。nanning 這是以中國南寧命名的一個項目,搞不清楚為什么和中國相關?是中國人發(fā)起的?•基于字節(jié)碼的項目有:aspectwerkz — 基于Java的簡單、動態(tài)、輕量級、強大的AOP框架。既強大又簡單,有助于更容易的集成AOP到新的或已存在的項目中。spring Spring.NET — 流行的 Java Spring 框架的一個 .NET 版本。在下一個版本中將實現(xiàn) AOP。 • DynamicAspects — 能夠讓你使用java編寫的面向切面的程序設計,它使用在Sun JDK 1.5中介的'instrumentation'與'agent',Aspects能夠軟件各模塊之間的關系在運行期安裝與使用。 • dynaop框架 — 使用一個基于運行時的編程機制將AOP代碼插入對象中,而不是返回一個具有特征代碼的對象。AOP將是面向對象設計(OO)的一個新的領域。 • CAESAR — 是一個新的與Java兼容的AOP語言。所有java程序多能使用CAESAR。 • PROSE — 是一個動態(tài)編排(weaving)工具(允許在運行期插入或抽取aspects)。PROSE aspects是規(guī)則的Java對象能夠被發(fā)送到或從網(wǎng)絡上的計算機接收。簽名可被用于保證它們的完整性。一旦一個aspect插入到JVM中,任何事件的發(fā)生將影響在相應aspect advice執(zhí)行的結果。假如一個aspect從JVM中撤消,aspect代碼將被丟棄并且相應的攔截也將不會再發(fā)生。PROSE aspects是規(guī)則的Java對象能夠被發(fā)送到或從網(wǎng)絡上的計算機接收。簽名可被用于保證它們的完整性。一旦一個aspect插入到JVM中,任何事件的發(fā)生將影響在相應aspect advice執(zhí)行的結果。假如一個aspect從JVM中撤消,aspect代碼將被丟棄并且相應的攔截也將不會再發(fā)生。 • Encase — Encase 在運行時期間應用能夠單獨添加到對象的方面。 • Aspect# — 一個針對 CLI 的 AOP 聯(lián)合兼容框架,提供聲明和配置方面的內(nèi)置語言。 • RAIL — RAIL 框架在虛擬機 JIT 類時應用方面。 • Eos — 用于 C# 的一個面向方面的擴展。 Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd
標簽: Java
相關文章:
主站蜘蛛池模板: 国产精品久久久久影视不卡 | 久久激情五月丁香伊人 | 成人在线一区二区三区 | 国产乱人伦偷精品视频不卡 | 国产91精品高清一区二区三区 | 国产高清在线免费视频 | 精品视频99 | 玖玖玖视频在线观看视频6 玖玖视频精品 | 日韩毛片高清免费 | 色屁屁www影院免费观看入口 | 免费精品国产 | 国产在线观看99 | 国产成人福利色视频 | 久久97精品久久久久久清纯 | 国产 日韩 欧美视频二区 | 中文字幕日韩欧美一区二区三区 | 国产区第一页 | 国产在线视频精品视频免费看 | 久久精品国产精品国产精品污 | 免费观看a毛片一区二区不卡 | 国产精品亚洲一区二区在线观看 | 日韩一区二区三区视频在线观看 | 亚洲主播 | 91手机在线视频观看 | 免费网站你懂的 | 热re99久久国产精品 | 日本成aⅴ人片日本伦 | 男女做污污无遮挡激烈免费 | 国产高清在线视频伊甸园 | 国产成人v爽在线免播放观看 | 黄在线视频播放免费网站 | 国产精品自拍在线 | 黄色片1级 | 精品亚洲一区二区三区在线播放 | 亚洲青青青网伊人精品 | 亚洲特级毛片 | 91福利国产在线观看一区二区 | www视频免费在线观看 | 国产精品拍拍拍福利在线观看 | 国产3级在线观看 | 亚洲精品不卡久久久久久 |