国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

java框架之AOP框架

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