欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
java框架之AOP框架
一般情況下,對象是由一行行的代碼“粘合”在一起的。創(chuàng )建這個(gè)對象。創(chuàng )建那個(gè)對象。為那個(gè)對象(其值為這個(gè)對象)設置屬性。其間還點(diǎn)綴著(zhù)一些用戶(hù)數據。將一切攪拌在一起。這是現代程序員在進(jìn)行設計和編碼時(shí)經(jīng)常做的事情。
      將多個(gè)這樣的類(lèi)組合起來(lái)形成具有一定功能的組件,而很多這樣的組件以這種方式連接起來(lái)會(huì )出現這樣的問(wèn)題:要實(shí)現不同的方法時(shí),需要花費大量時(shí)間編寫(xiě)同樣的代碼。這些代碼行中往往會(huì )有以下操作:將這個(gè)方法的活動(dòng)記錄日志到一個(gè)文件中以備調試,運行安全性檢查,啟動(dòng)一個(gè)事務(wù),打開(kāi)一個(gè)數據庫連接,記住捕捉 C++ 異?;蛘?Win32 結構化異常以轉換為 COM 異常,還要驗證參數。而且,還要切記在方法執行完之后銷(xiāo)毀方法開(kāi)始時(shí)的設置。還有很多的事務(wù)機制、安全機制以及對象池或線(xiàn)程池等性能優(yōu)化機制。
       這種重復代碼經(jīng)常出現的原因在于,開(kāi)發(fā)人員被訓練為根據軟件項目需求中的名詞來(lái)設計系統。如果設計的是銀行系統,Account類(lèi)和Customer 類(lèi)必不可少,它們都將自己獨特的詳細信息收集到一處,但是它們的每個(gè)方法也都需要進(jìn)行日志、安全檢查、事務(wù)管理等操作。區別在于,日志等操作是一些與特定應用無(wú)關(guān)的系統方面。
      這些功能機制是每個(gè)應用系統幾乎都需要的,因此可以從具體應用系統中分離出來(lái),形成一個(gè)通用的框架平臺,而且,這些功能機制的設計開(kāi)發(fā)有一定難度,同時(shí)運行的穩定性和快速性都非常重要,必須經(jīng)過(guò)長(cháng)時(shí)間調試和運行經(jīng)驗積累而成。

    這樣,我們已經(jīng)有了一種分散關(guān)注的思路(separation of concerns)。
       將通用需求功能從不相關(guān)類(lèi)之中分離出來(lái);同時(shí),能夠使得很多類(lèi)共享一個(gè)行為,一旦行為發(fā)生變化,不必修改很多類(lèi),只要修改這個(gè)行為就可以。這就是分散關(guān)注(separation of concerns)。
    AOP就是這種實(shí)現分散關(guān)注的編程方法,它將“關(guān)注”封裝在“方面”中。
      面向方面編程 (AOP) 是施樂(lè )公司帕洛阿爾托研究中心 (Xerox PARC) 在20世紀 90 年代發(fā)明的一種編程范式,它使開(kāi)發(fā)人員可以更好地將本不該彼此糾纏在一起的任務(wù)(例如數學(xué)運算和異常處理)分離開(kāi)來(lái)。 AOP 方法有很多優(yōu)點(diǎn)。首先,由于操作更為簡(jiǎn)潔,所以改進(jìn)了性能。其次,它使程序員可以花費更少的時(shí)間重寫(xiě)相同的代碼??傊?,AOP 能夠為不同過(guò)程提供更好的封裝性,提高未來(lái)的互操作性。
      是什么使軟件工程師都希望自己能成為硬件工程師呢?自從函數發(fā)明以來(lái),程序員花費了大量時(shí)間(及其老板的大多數資金)試圖設計這樣的系統:它們不過(guò)是一些組合模型,由其他人創(chuàng )建的部件構成,布置成獨特的形狀,再覆蓋上一些悅目的顏色。函數、模板、類(lèi)、組件等等一切,都是軟件工程師自己創(chuàng )建“軟件集成電路”(模擬硬件設計師的電子器件)的種種嘗試。
      我把這些都歸咎于 Lego(樂(lè )高玩具)。把兩個(gè)玩具塊(即組件)拼起時(shí)發(fā)出的悅耳的咔噠聲很讓人上癮,會(huì )促使許多程序員發(fā)明一種又一種新的封裝和重用的新機制。這方面最新的進(jìn)展就稱(chēng)為面向方面編程 (AOP) 。 AOP 的核心是安排(一個(gè)摞在另一個(gè)之上)組件的一種方式,可以獲得其他種類(lèi)基于組件的開(kāi)發(fā)方法無(wú)法得到的重用級別。這種安排是在客戶(hù)端和對象之間的調用堆棧中進(jìn)行的,其結果是為對象創(chuàng )建了一種特定的環(huán)境。這種環(huán)境正是 AOP 程序員主要追求的東西。

      AOP是什么?
      AOP是OOP的延續,是Aspect Oriented Programming的縮寫(xiě),意思是面向方面編程。AOP實(shí)際是GoF設計模式的延續,設計模式孜孜不倦追求的是調用者和被調用者之間的解耦,AOP可以說(shuō)也是這種目標的一種實(shí)現。
  舉例:假設有在一個(gè)應用系統中,有一個(gè)共享的數據必須被并發(fā)同時(shí)訪(fǎng)問(wèn),首先,將這個(gè)數據封裝在數據對象中,稱(chēng)為Data Class,同時(shí),將有多個(gè)訪(fǎng)問(wèn)類(lèi),專(zhuān)門(mén)用于在同一時(shí)刻訪(fǎng)問(wèn)這同一個(gè)數據對象。
  為了完成上述并發(fā)訪(fǎng)問(wèn)同一資源的功能,需要引入鎖Lock的概念,也就是說(shuō),某個(gè)時(shí)刻,當有一個(gè)訪(fǎng)問(wèn)類(lèi)訪(fǎng)問(wèn)這個(gè)數據對象時(shí),這個(gè)數據對象必須上鎖Locked,用完后就立即解鎖unLocked,再供其它訪(fǎng)問(wèn)類(lèi)訪(fǎng)問(wèn)。
  使用傳統的編程習慣,我們會(huì )創(chuàng )建一個(gè)抽象類(lèi),所有的訪(fǎng)問(wèn)類(lèi)繼承這個(gè)抽象父類(lèi),如下:
    abstract class Worker{
      abstract void locked();
      abstract void accessDataObject();
      abstract void unlocked();
}
  這樣做的缺點(diǎn):
      accessDataObject()方法需要有“鎖”狀態(tài)之類(lèi)的相關(guān)代碼。
      Java只提供了單繼承,因此具體訪(fǎng)問(wèn)類(lèi)只能繼承這個(gè)父類(lèi),如果具體訪(fǎng)問(wèn)類(lèi)還要繼承其它父類(lèi),比如另外一個(gè)如Worker的父類(lèi),將無(wú)法方便實(shí)現。重用被打折扣,具體訪(fǎng)問(wèn)類(lèi)因為也包含“鎖”狀態(tài)之類(lèi)的相關(guān)代碼,只能被重用在相關(guān)有“鎖”的場(chǎng)合,重用范圍很窄。
      仔細研究這個(gè)應用的“鎖”,它其實(shí)有下列特性:
      “鎖”功能不是具體訪(fǎng)問(wèn)類(lèi)的首要或主要功能,訪(fǎng)問(wèn)類(lèi)主要功能是訪(fǎng)問(wèn)數據對象,例如讀取數據或更改動(dòng)作。
      “鎖”行為其實(shí)是和具體訪(fǎng)問(wèn)類(lèi)的主要功能可以獨立、區分開(kāi)來(lái)的。
      “鎖”功能其實(shí)是這個(gè)系統的一個(gè)縱向切面,涉及許多類(lèi)、許多類(lèi)的方法。
        因此,一個(gè)新的程序結構應該是關(guān)注系統的縱向切面,例如這個(gè)應用的“鎖”功能,這個(gè)新的程序結構就是aspect(方面)。
  在這個(gè)應用中,“鎖”方面(aspect)應該有以下職責:
  提供一些必備的功能,對被訪(fǎng)問(wèn)對象實(shí)現加鎖或解鎖功能。以保證所有在修改數據對象的操作之前能夠調用lock()加鎖,在它使用完成后,調用unlock()解鎖。

      什么是方面?
      在考慮對象及對象與其他對象的關(guān)系時(shí),我們通常會(huì )想到繼承這個(gè)術(shù)語(yǔ)。例如,定義某一個(gè)抽象類(lèi) — Dog 類(lèi)。在標識相似的一些類(lèi)但每個(gè)類(lèi)又有各自的獨特行為時(shí),通常使用繼承來(lái)擴展功能。舉例來(lái)說(shuō),如果標識了 Poodle,則可以說(shuō)一個(gè) Poodle 是一個(gè) Dog,即 Poodle 繼承了 Dog。到此為止都似乎不錯,但是如果定義另一個(gè)以后標識為 Obedient Dog 的獨特行為又會(huì )怎樣呢?當然,不是所有的 Dogs 都很馴服,所以 Dog 類(lèi)不能包含 obedience 行為。此外,如果要創(chuàng )建從 Dog 繼承的 Obedient Dog 類(lèi),那么 Poodle 放在這個(gè)層次結構中的哪個(gè)位置合適呢?Poodle 是一個(gè) Dog,但是 Poodle 不一定 obedient;那么 Poodle 是繼承于 Dog 還是 Obedient Dog 呢?都不是,我們可以將馴服看作一個(gè)方面,將其應用到任何一類(lèi)馴服的 Dog,我們反對以不恰當的方式強制將該行為放在 Dog 層次結構中。
      在軟件術(shù)語(yǔ)中,面向方面的編程能夠獨立于任何繼承層次結構而應用改變類(lèi)或對象行為的方面。然后,在運行時(shí)或編譯時(shí)應用這些方面。舉一個(gè)關(guān)于 AOP 的示例,然后進(jìn)行描述,說(shuō)明起來(lái)比較容易。首先,定義四個(gè)關(guān)鍵的 AOP 術(shù)語(yǔ),這很重要,因為我將反復使用它們:
      • 接合點(diǎn) (Joinpoint) — 代碼中定義明確的可識別的點(diǎn)。
      • 切點(diǎn) (Pointcut) — 通過(guò)配置或編碼指定接合點(diǎn)的一種方法。
      • 通知 (Advice) — 表示需要執行交叉切割動(dòng)作的一種方法
      • 混入 (Mixin) — 通過(guò)將一個(gè)類(lèi)的實(shí)例混入目標類(lèi)的實(shí)例引入新行為。
      為了更好地理解這些術(shù)語(yǔ),可以將接合點(diǎn)看作程序流中定義好的一點(diǎn)。說(shuō)明接合點(diǎn)的一個(gè)很好的示例是:在代碼調用一個(gè)方法時(shí),發(fā)生調用的那一點(diǎn)被認為是一個(gè)接合點(diǎn)。
      切點(diǎn)用于指定或定義希望在程序流中截獲的接合點(diǎn)。切點(diǎn)還包含一個(gè)通知,該通知在到達接合點(diǎn)時(shí)發(fā)生。因此,如果在一個(gè)調用的特定方法上定義一個(gè)切點(diǎn),那么在調用該方法或接合點(diǎn)時(shí),AOP 框架將截獲該切點(diǎn),同時(shí)還將執行切點(diǎn)的通知。
      通知有幾種類(lèi)型,但是最常見(jiàn)的情況是將其看作要調用的另一個(gè)方法。在調用一個(gè)帶有切點(diǎn)的方法時(shí),要執行的通知將是另一個(gè)要調用的方法。要調用的這個(gè)通知或方法可以是對象中被截獲的方法,也可以是混入的另一個(gè)對象中的方法。

          AOP有必要嗎?
  當然,上述應用范例在沒(méi)有使用AOP情況下,也得到了解決,例如JBoss 3.XXX也提供了上述應用功能,但是沒(méi)有使用AOP。
  但是,使用AOP可以讓我們從一個(gè)更高的抽象概念來(lái)理解軟件系統,AOP也許提供一種有價(jià)值的工具??梢赃@么說(shuō):因為使用AOP結構,現在JBoss 4.0的源碼要比JBoss 3.X容易理解多了,這對于一個(gè)大型復雜系統來(lái)說(shuō)是非常重要的。
  從另外一個(gè)方面說(shuō),好像不是所有的人都需要關(guān)心AOP,它可能是一種架構設計的選擇,如果選擇J2EE系統,AOP關(guān)注的上述通用方面都已經(jīng)被J2EE容器實(shí)現了,J2EE應用系統開(kāi)發(fā)者可能需要更多地關(guān)注行業(yè)應用方面aspect。

        AOP具體實(shí)現
  AOP是一個(gè)概念,并沒(méi)有設定具體語(yǔ)言的實(shí)現,它能克服那些只有單繼承特性語(yǔ)言的缺點(diǎn)(如Java),將 AOP 用于多數大型系統或關(guān)鍵的生產(chǎn)系統還不完全成熟,但是隨著(zhù)語(yǔ)言支持的提高,AOP 的應用將更容易。另外,提高支持也是新的軟件開(kāi)發(fā)范例,例如利用面向方面的編程的軟件工廠(chǎng)。目前有幾種可用的 AOP 框架,每個(gè)框架都有其自己的方法、正面屬性和負面屬性。 目前AOP具體實(shí)現有以下幾個(gè)項目:
  •AspectJ (TM) : 創(chuàng )建于Xerox PARC. 有近十年歷史,成熟
  缺點(diǎn):過(guò)于復雜;破壞封裝;需要專(zhuān)門(mén)的Java編譯器。
  •動(dòng)態(tài)AOP:使用JDK的動(dòng)態(tài)代理API或字節碼Bytecode處理技術(shù)。
  基于動(dòng)態(tài)代理API的具體項目有:
  JBoss 4.0 JBoss 4.0服務(wù)器
        JAC (Java Aspect Components) — 是一個(gè)應用服務(wù)器。它為Java2平臺、用于Java開(kāi)發(fā)的企業(yè)開(kāi)發(fā)環(huán)境(J2EE)、和基于Web的分布式應用,提供開(kāi)放式資源的又一個(gè)選擇(在GNU次常規公共許可證下發(fā)布)。JAC包括統一模型語(yǔ)言(UML)IDE,該UML IDE模塊化應用商業(yè)邏輯并且自動(dòng)生成和編譯純商業(yè)邏輯Java類(lèi)。這些類(lèi),在JAC容器內執行,可從一組技術(shù)和/或商業(yè)的橫切關(guān)系(crosscutting concerns)如:數據持久性、認證、配置文件管理、訪(fǎng)問(wèn)權限檢測、演示、和負載平衡中無(wú)縫地受益?;诿嫦蚍矫婢幊碳夹g(shù)(AOP)的JAC將這些關(guān)系( concerns)從應用程序的核心商業(yè)邏輯中分離出來(lái)。
  nanning 這是以中國南寧命名的一個(gè)項目,搞不清楚為什么和中國相關(guān)?是中國人發(fā)起的?
  •基于字節碼的項目有:
  aspectwerkz — 基于Java的簡(jiǎn)單、動(dòng)態(tài)、輕量級、強大的AOP框架。既強大又簡(jiǎn)單,有助于更容易的集成AOP到新的或已存在的項目中。
  spring
        Spring.NET — 流行的 Java Spring 框架的一個(gè) .NET 版本。在下一個(gè)版本中將實(shí)現 AOP。
        • DynamicAspects — 能夠讓你使用java編寫(xiě)的面向切面的程序設計,它使用在Sun JDK 1.5中介的"instrumentation"與"agent",Aspects能夠軟件各模塊之間的關(guān)系在運行期安裝與使用。
        • dynaop框架 — 使用一個(gè)基于運行時(shí)的編程機制將AOP代碼插入對象中,而不是返回一個(gè)具有特征代碼的對象。AOP將是面向對象設計(OO)的一個(gè)新的領(lǐng)域。
        • CAESAR — 是一個(gè)新的與Java兼容的AOP語(yǔ)言。所有java程序多能使用CAESAR。
        • PROSE — 是一個(gè)動(dòng)態(tài)編排(weaving)工具(允許在運行期插入或抽取aspects)。PROSE aspects是規則的Java對象能夠被發(fā)送到或從網(wǎng)絡(luò )上的計算機接收。簽名可被用于保證它們的完整性。一旦一個(gè)aspect插入到JVM中,任何事件的發(fā)生將影響在相應aspect advice執行的結果。假如一個(gè)aspect從JVM中撤消,aspect代碼將被丟棄并且相應的攔截也將不會(huì )再發(fā)生。PROSE aspects是規則的Java對象能夠被發(fā)送到或從網(wǎng)絡(luò )上的計算機接收。簽名可被用于保證它們的完整性。一旦一個(gè)aspect插入到JVM中,任何事件的發(fā)生將影響在相應aspect advice執行的結果。假如一個(gè)aspect從JVM中撤消,aspect代碼將被丟棄并且相應的攔截也將不會(huì )再發(fā)生。
        • Encase — Encase 在運行時(shí)期間應用能夠單獨添加到對象的方面。
        • Aspect# — 一個(gè)針對 CLI 的 AOP 聯(lián)合兼容框架,提供聲明和配置方面的內置語(yǔ)言。
        • RAIL — RAIL 框架在虛擬機 JIT 類(lèi)時(shí)應用方面。  
        • Eos — 用于 C# 的一個(gè)面向方面的擴展。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Java平臺AOP技術(shù)研究
AOP技術(shù)基礎
CSDN技術(shù)中心 什么是AOP系列之一:AOP概念解析
關(guān)于spring中的aop的解釋
Aspectwerkz動(dòng)態(tài)實(shí)現AOP
EJB3和Spring技術(shù)體系比較 - ShenYang Java User Group ...
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久