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

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

JBOSSAOP學習筆記-AOP基本知識

2019-11-18 16:22:38
字體:
來源:轉載
供稿:網友

  面向方面編程(AOP)是一種新的規范,允許你達到以前面對對象方法無法達到的組織和分層你的應用程序的方法. 方面允許你很明顯的把功能性的東西粘合起來,所以你就可以很方便的為程序設計很多的層。AOP可以攔截所有java程序中的事件觸發。

什么是aop?
一個方面(aspect)就是一個共有的特性,具有此代表性的有:橫向分離的方法,類,對象層次或者實體對象模型。它們看起來應該是組合在一起的,但是在AOP里面你不用像以前面對對象(OO)那樣來組織它們了。

在傳統JAVA中要加入計算時間的代碼到你的應用中,你必須按以下方式:
public class BankAccountDAO
{
  public void withdraw(double amount)
  {
    long startTime = System.currentTimeMillis();
    try
    {
      // Actual method body...
    }
    finally
    {
      long endTime = System.currentTimeMillis() - startTime;
      System.out.    }
  }
}


我們可以列舉這里面存在的幾個問題:
1。如果你要在每個你的方法中都加入這樣的代理,無疑是十分糟糕的,特別是有try/catch這樣的語句。
2。這里有很多代碼都不是你真實需要用到的,這樣就使你的程序代碼十分臃腫,讀起來也十分困難。而且你不得不把你的代碼放在try里面......
3。如果你要擴展這段代碼,我們可以遇見到那將是十分困難的工作。

所以可見,這樣的代碼是十分難于維護,擴展和繼承的,因為在這里面有很多東西分散了你對你這段代碼真正要實現的東西的注意力。而且這只不過是一段最簡單的例子,在真正的OOP中是很難實現對以上代碼更好的表現方法的。

面對方面編程可以分離你的這些功能性,可以讓你增加行為來圍繞你的功能代碼。例如上面的,AOP就可以使在執行你自己的代碼前你可以控制執行其它的功能。

所有實現AOP的框架都有兩種方式:組裝關注點 和 a programmatic constrUCt(編程實現)

JBOSS的一個橫向切入關注點
01. public class Metrics implements org.jboss.aop.Interceptor
02. {
03.   public Object invoke(Invocation invocation) throws Throwable
04.   {
05.     long startTime = System.currentTimeMillis();
06.     try
07.     {
08.       return invocation.invokeNext();
09.     }
10.     finally
11.     {
12.       long endTime = System.currentTimeMillis() - startTime;
13.       java.lang.reflect.Method m = ((MethodInvocation)invocation).method;
14.       System.out.println("method " + m.toString() + " time: " + endTime + "ms");
15.     }
16.   }
17. }

真正實現的功能代碼是在8行調用了,這就是實現了組裝關注點,使之成為了一個方面。這讓我們在以后擴展實際功能的時候就十分方便了,只需要去修改具體的實現方法,而不用去關心其它關注點了。

JBOOS中具體應用這個方面
需要定義一個切入點(pointcuts),全部通過政則表達式來實現。

Listing Three: Defining a pointcut in JBoss AOP

1. <bind pointcut="public void com.mc.BankAccountDAO->withdraw(double amount)">
2.       <interceptor class="com.mc.Metrics"/>
3. </bind >

4. <bind pointcut="* com.mc.billing.*->*(..)">
5.       <interceptor class="com.mc.Metrics"/>
6. </bind >


1-3定義的一個切入點的方法就是 BankAccountDAO->withdraw(double amount)
4-6定義的是一個通用的,它的切入點是所有的com.mc.billing.下面的類的方法。

(出處:http://www.survivalescaperooms.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大洼县| 垦利县| 临湘市| 济宁市| 绥德县| 辽源市| 叙永县| 昌乐县| 繁峙县| 米林县| 栖霞市| 华池县| 郯城县| 府谷县| 尖扎县| 区。| 乌兰县| 奇台县| 萝北县| 蕉岭县| 桑日县| 古丈县| 陆河县| 枣强县| 得荣县| 彭州市| 大港区| 吉水县| 鄄城县| 武穴市| 阳泉市| 桐城市| 张家港市| 铜川市| 秦安县| 容城县| 韶关市| 甘孜| 惠州市| 合阳县| 金阳县|