亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 >
AOP的利器:ASM 3.0介紹
作者:網絡轉載 發布時間:[ 2013/2/22 13:41:25 ] 推薦標簽:

什么是 ASM?

ASM 是一個 Java 字節碼操控框架。它能被用來動態生成類或者增強既有類的功能。ASM 可以直接產生二進制 class 文件,也可以在類被加載入 Java 虛擬機之前動態改變類行為。Java class 被存儲在嚴格格式定義的 .class 文件里,這些類文件擁有足夠的元數據來解析類中的所有元素:類名稱、方法、屬性以及 Java 字節碼(指令)。ASM 從類文件中讀入信息后,能夠改變類行為,分析類信息,甚至能夠根據用戶要求生成新類。

與 BCEL 和 SERL 不同,ASM 提供了更為現代的編程模型。對于 ASM 來說,Java class 被描述為一棵樹;使用 “Visitor” 模式遍歷整個二進制結構;事件驅動的處理方式使得用戶只需要關注于對其編程有意義的部分,而不必了解 Java 類文件格式的所有細節:ASM 框架提供了默認的 “response taker”處理這一切。

為什么要動態生成 Java 類?

動態生成 Java 類與 AOP 密切相關的。AOP 的初衷在于軟件設計世界中存在這么一類代碼,零散而又耦合:零散是由于一些公有的功能(諸如的 log 例子)分散在所有模塊之中;同時改變 log 功能又會影響到所有的模塊。出現這樣的缺陷,很大程度上是由于傳統的 面向對象編程注重以繼承關系為代表的“縱向”關系,而對于擁有相同功能或者說方面 (Aspect)的模塊之間的“橫向”關系不能很好地表達。例如,目前有一個既有的銀行管理系統,包括 Bank、Customer、Aclearcase/" target="_blank" >ccount、Invoice 等對象,現在要加入一個安全檢查模塊, 對已有類的所有操作之前都必須進行一次安全檢查。

圖 1. ASM – AOP

 

然而 Bank、Customer、Account、Invoice 是代表不同的事務,派生自不同的父類,很難在高層上加入關于 Security Checker 的共有功能。對于沒有多繼承的 Java 來說,更是如此。傳統的解決方案是使用 Decorator 模式,它可以在一定程度上改善耦合,而功能仍舊是分散的 —— 每個需要 Security Checker 的類都必須要派生一個 Decorator,每個需要 Security Checker 的方法都要被包裝(wrap)。下面我們以 Account 類為例看一下 Decorator:

首先,我們有一個 SecurityChecker 類,其靜態方法 checkSecurity 執行安全檢查功能:

 public class SecurityChecker {         public static void checkSecurity() {                 System.out.println("SecurityChecker.checkSecurity ...");                 //TODO real security check         }        }      


另一個是 Account 類:

 public class Account {         public void operation() {                 System.out.println("operation...");                 //TODO real operation         } }      


若想對 operation 加入對 SecurityCheck.checkSecurity() 調用,標準的 Decorator 需要先定義一個 Account 類的接口:

 public interface Account {         void operation();  }      


然后把原來的 Account 類定義為一個實現類:

 public class AccountImpl extends Account{         public void operation() {                 System.out.println("operation...");                 //TODO real operation         } }       


定義一個 Account 類的 Decorator,并包裝 operation 方法:

 public class AccountWithSecurityCheck implements Account {                 private  Account account;         public AccountWithSecurityCheck (Account account) {                 this.account = account;         }         public void operation() {                 SecurityChecker.checkSecurity();                 account.operation();         } }      


在這個簡單的例子里,改造一個類的一個方法還好,如果是變動整個模塊,Decorator 很快會演化成另一個噩夢。動態改變 Java 類是要解決 AOP 的問題,提供一種得到系統支持的可編程的方法,自動化地生成或者增強 Java 代碼。這種技術已經廣泛應用于新的 Java 框架內,如 Hibernate,Spring 等。

上一頁123下一頁
軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 亚洲色图综合图片 | 亚洲国产日韩欧美在线a乱码 | 国产精品青青 | 成年人免费看 | 男女男在线精品网站免费观看 | 在线播放性xxx欧美 在线播放你懂的 | 欧美日韩视频在线 | 国产九九视频在线观看 | 一区二区中文字幕 | 天堂va亚洲va欧美va国产 | 欧美一区日韩一区中文字幕页 | 无遮挡一级毛片呦女视频 | 妇欲欢公爽公妇高h欲 | 理论片中文 | 免费在线看黄网站 | 在线成人爽a毛片免费软件 在线成人影片 | 天天摸夜班摸天天碰 | 免费国产黄色片 | 青春草视频在线观看免费 | 亚洲成人18 | 亚洲精品日本 | 日韩伦理剧在线观看 | 制服丝袜第一页在线观看 | 深夜影院深a | 国产无遮挡男女羞羞影院在线播放 | 国产一二三四区在线观看 | 国产高清一区二区三区 | 手机在线黄色 | 亚洲线精品久久一区二区三区 | 天天操夜夜操狠狠操 | 香蕉视频亚洲一级 | 影音先锋国产资源 | 香港三级日本三级人妇网站 | 中国产一级毛片 | a丫久久久久久一级毛片 | 在线观看嗯啊成人动作片 | 亚洲人成网址 | 久爱免费观看在线精品 | 草草视频免费看 | 天堂网亚洲 | 99久久中文字幕伊人 |