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

首頁 > 學院 > 開發設計 > 正文

面向方面編程慨述和JBoss

2019-11-18 14:08:11
字體:
來源:轉載
供稿:網友

  概述

  面向方面的程序設計(AOP)是一個激動人心的新規范,和已經有十幾年歷史的面向對象的程序設計(OOP)在軟件開發上有相同的作用。 AOP和OOP不是相互競爭的技術,實際上它們相輔相成的十分融洽。 面向對象的程序設計對于建模常見的對象等級體系非常有用。 它的不足之處在于處理跨多個非關聯對象模型的常見情況;這時就有AOP的用武之地了。 AOP答應你跨關聯,使用單獨的、彼此之間非常不同的對象模型。 它答應你層次化--而不是嵌入--函數,以便代碼更易讀、更便于維護。 我們喜歡把面向對象的程序設計想象成為自頂向下的軟件開發,而面向方面的程序設計則是自左向右;它們是完全正交的技術,彼此之間相輔相成的十分融洽。

  面向對象的程序設計的手段是繼續、封裝和多態性,而面向方面的程序設計的組件是通知/監聽器(advice/interceptor)、引入(introdUCtion)、元數據(metadata)和切入點(pointcut) 。 讓我們看看這些定義。

  通知/監聽器(advice/interceptor)

  一個通知是被某一事件觸發的程序邏輯。 它是可以被插入一個方法調用者和實際的方法之間的行為。 通知實際上是面向方面的程序設計的要害。這些構造答應你定義橫切(cross-cutting)行為。通知答應你透明地應用象記錄和度量這樣的事到現有的對象模型中。

  在JBoss AOP中,我們使用監聽器實現通知。你可以定義監聽器監聽方法調用、構造器調用和字段訪問。稍后,我們將研究如何應用這些監聽器到一個現有的對象模型中。

  引入

  引入是一種添加方法或者字段到一個現有類的方法。它們甚至答應你改變一個現有類目前實現的接口并且引入一個混合類實現這些新接口。

  引入答應你把多繼續帶到簡單的java類中。引入的一個重要的使用實例就是你有一個想有運行時間接口的方面。你想跨不同的對象層次應用你的方面,但是你仍然想應用程序開發者能夠調用指定方面API。

Apple apple = new Apple();
LoggingAPI logging = (LoggingAPI)apple;
Apple.setLoggingLevel(VERBOSE);
  引入可以是一個把新API附加于一個現有對象模型的方法。

  元數據

  元數據是可以附屬于一個類的附加信息,或者以靜態方式或者在運行時間。當你可以動態地把元數據附上到一個對象給定的實例中的時候,它將更加有效。當你正在編寫可用于任何對象的一般的方面的時候,元數據顯得非凡重要,但是程序邏輯必須知道指定類的信息。元數據被使用的一種很類似的情況是EJB規范。在EJB xml配置描述符中,你在一個每方法的基礎上定義事務屬性。應用程序服務器知道何時何地開始、暫停或者委托一個事務,因為你已經定義Required、RequiresNew、Supports等方法。在你的EJB類和事務治理程序綁定的元數據里,是bean的XML配置文件。

  C#已經把元數據構建入語言中。XDoclet是另一個正在工作的很好的元數據的例子。假如你曾經用過XDoclet來生成EJB文件和配置描述符,你肯定知道元數據強大的功能。Java Community PRocess(JCP)達成協議,元數據被添加進JDK 1.5 (見JSR175)。直到JSR 175真正成為一種規范,一個好的AOP框架才能提供一個機制,聲明在運行時間有效的類級元數據。

  切入點

  假如監聽器,引入和元數據是面向方面的程序設計的特性,那么切入點就是把這些特性聯系起來的紐帶。切入點告訴面向方面的程序設計框架,哪個監聽器將和哪個類捆綁在一起,哪些元數據將用于哪些類,或者引入將被導入到哪些類中。 切入點定義能夠用于你的應用程序的類的各種面向方面的程序設計特性。
工作中的面向方面的程序設計 例子1、使用監聽器

  JBoss 4.0帶有一個面向方面的程序設計框架。這個框架和JBoss應用程序服務器緊密地整合,但是你還可以在你自己的應用程序上單獨運行它。你只有看到它如何工作,才能真正明白一個概念,所以讓我們使用JBoss AOP中的例子來說明所有這些東西是如何合作的。在本文剩余的部分,我們將使用AOP構建一個簡單的追蹤框架。

  定義一個監聽器

  首先要做的是實現我們的小跟蹤框架,來定義將做實際工作的監聽器。 JBoss AOP中的所有的監聽器必須實現org.jboss.aop.Interceptor接口。

public interface Interceptor
{
public String getName();
public InvocationResponse invoke(Invocation invocation) throws Throwable;
}
  JBoss AOP中被監聽的所有字段、構造器和方法被轉化為一個普通的Invocation調用。方法參數被裝入一個Invocation對象,然后一個方法、字段訪問或者構造器的返回值被裝入一個InvocationResponse對象。Invocation對象還驅動監聽器鏈。為了解釋清楚,我們來看看在一個例程中所有這些對象如何使用。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吉林省| 寿阳县| 延寿县| 枣庄市| 南宫市| 安塞县| 宁安市| 兴化市| 济源市| 道真| 得荣县| 马鞍山市| 永济市| 大足县| 米易县| 犍为县| 江门市| 瑞金市| 怀远县| 韩城市| 武平县| 芦山县| 衢州市| 衡水市| 雷州市| 石狮市| 乌鲁木齐县| 平遥县| 长治市| 顺义区| 珠海市| 西峡县| 麦盖提县| 江口县| 馆陶县| 双流县| 神池县| 青田县| 营口市| 巫溪县| 定南县|