日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

java框架之AOP框架

瀏覽:176日期: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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久国产精品成人免费观看的软件| 欧美亚洲自偷自偷| 日韩精品午夜视频| 91精品精品| 激情婷婷亚洲| 国产不卡人人| 精品国产一区二区三区噜噜噜| 国产精品7m凸凹视频分类| 99国产精品免费视频观看| 97精品国产福利一区二区三区| 国产精品久久久久久久久免费高清| 影院欧美亚洲| 免费成人av在线播放| 99国产精品久久久久久久成人热 | 免费看久久久| 日韩精品一区二区三区中文在线| 亚洲精品三级| 人人爽香蕉精品| 亚洲欧美日韩在线观看a三区| 欧美在线网站| 亚洲区欧美区| 日韩一区二区三区高清在线观看| 亚洲欧洲国产精品一区| 99在线精品免费视频九九视 | 欧美性感美女一区二区| 日本久久成人网| 亚洲成人精品| 国产在线观看www| 夜鲁夜鲁夜鲁视频在线播放| 成人精品动漫一区二区三区| 成人福利一区 | 99国产精品| 黄色亚洲大片免费在线观看| 亚洲男人在线| 色8久久久久| 欧美精品福利| 97se亚洲| 国产一区二区三区四区二区| 高潮一区二区| 精品三级久久| 亚洲免费影视| 亚洲丝袜啪啪| 国产日韩中文在线中文字幕| caoporn视频在线| 在线国产一区二区| 亚洲日本久久| 日本h片久久| 国产美女高潮在线| 一区二区三区四区在线看| 午夜亚洲福利在线老司机| 婷婷成人av| 久久69成人| 99久久精品网| 亚洲男人在线| 婷婷激情一区| 一二三区精品| 卡一卡二国产精品| 肉色欧美久久久久久久免费看| 夜夜嗨av一区二区三区网站四季av| 亚洲三级视频| 精品九九在线| 蜜臀av亚洲一区中文字幕| 日本一区二区三区视频在线看 | 91一区二区三区四区| 亚洲午夜av| 水蜜桃久久夜色精品一区的特点| 久久99蜜桃| 蜜桃视频欧美| 欧美自拍一区| 免费观看不卡av| 日韩精品视频网站| 精品一区二区三区的国产在线观看| 日韩久久精品| 7777精品| 在线成人动漫av| 久久国产精品免费一区二区三区 | 亚洲天堂免费电影| 91成人小视频| 99国产精品免费视频观看| 亚洲啊v在线免费视频| 成人在线超碰| 日韩一区二区三区精品| 日韩不卡免费高清视频| 国产精品nxnn| 国产亚洲高清视频| 精品国产黄a∨片高清在线| 亚洲男女自偷自拍| 国产 日韩 欧美 综合 一区| 亚洲综合专区| 国产一区二区三区四区| 免费看日韩精品| 韩国一区二区三区视频| 久久www成人_看片免费不卡| 国内揄拍国内精品久久| 欧美亚洲专区| 一区视频在线| 日本一二区不卡| 亚洲久久一区| 99精品在线观看| 美女久久99| 亚州精品视频| 国产精品免费看| 久久电影tv| 国产精品亚洲四区在线观看| 免费视频一区二区| 91亚洲国产成人久久精品| 日本va欧美va精品| 一区二区自拍| 在线天堂中文资源最新版| 日韩一区二区三区免费视频 | 最新亚洲一区| 久久国产主播| 精品久久久网| 国产日韩欧美三区| 日韩av在线免费观看不卡| 久久国产福利| 亚洲婷婷免费| 黄色欧美在线| 你懂的国产精品永久在线| 蜜臀va亚洲va欧美va天堂 | 国产精品va视频| 日韩精品第一| 日韩不卡在线观看日韩不卡视频| 亚洲日本久久| 亚洲三级网站| 亚洲精品亚洲人成在线观看| 免费在线观看日韩欧美| 亚洲一区二区免费在线观看| 亚洲一区欧美激情| 久久精品国产www456c0m| 色综合www| 999视频精品| 亚洲激情中文在线| 国产一区白浆| 亚洲欧美在线综合| 日本a级不卡| 国产精品久一| 国产一区2区在线观看| 欧美精品高清| 午夜国产一区二区| 先锋影音国产一区| 亚久久调教视频| 国产日产高清欧美一区二区三区| 国产精品日韩精品中文字幕| 国产精品最新| 岛国av免费在线观看| 国产综合色区在线观看| 欧美日韩激情| 视频一区视频二区中文| 日韩不卡一区二区| 久久午夜影院| 亚洲午夜精品久久久久久app| 国产亚洲一级| 91亚洲无吗| 日产午夜精品一线二线三线| 日韩精品网站| 男女男精品视频网| 国产精选久久| 欧美精品高清| 91久久亚洲| 日韩精品免费视频人成| 精品国产欧美日韩| 国产综合婷婷| 日本精品一区二区三区在线观看视频| 国产调教精品| 视频二区不卡| 亚洲资源网站| 国产一区二区三区黄网站| 欧美91视频| 欧美一区自拍| 久久久夜精品| 日韩精品一区二区三区中文| 精品国产午夜| 在线亚洲观看| 久久激情av| 亚洲h色精品| 日本成人在线一区| 日本国产精品| 欧美亚洲自偷自偷| 99热精品久久| 欧美日韩夜夜| 久久一级电影| 国产精品一区二区三区av| 久久久久一区| 日韩三级久久| 午夜精品成人av| 日本特黄久久久高潮| 日本少妇一区| 日韩一区网站| 波多野结衣久久精品| 日本一区中文字幕| 99tv成人| 国产精品亚洲片在线播放| 中国女人久久久| 国产精品成人一区二区不卡| 石原莉奈在线亚洲二区| 日韩免费av| 国产麻豆精品| 视频一区视频二区中文| 欧美成人精品三级网站|