欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

AOP 的利器:ASM 3.0 介紹(1)

系統 1784 0
ASM 是一個 Java 字節碼操控框架。它能被用來動態生成類或者增強既有類的功能。ASM 可以直接產生二進制 class 文件,也可以在類被加載入 Java 虛擬機之前動態改變類行為。Java class 被存儲在嚴格格式定義的 .class 文件里,這些類文件擁有足夠的元數據來解析類中的所有元素:類名稱、方法、屬性以及 Java 字節碼(指令)。ASM 從類文件中讀入信息后,能夠改變類行為,分析類信息,甚至能夠根據用戶要求生成新類。
與 BCEL 和 SERL 不同,ASM 提供了更為現代的編程模型。對于 ASM 來說,Java class 被描述為一棵樹;使用 “Visitor” 模式遍歷整個二進制結構;事件驅動的處理方式使得用戶只需要關注于對其編程有意義的部分,而不必了解 Java 類文件格式的所有細節:ASM 框架提供了默認的 “response taker”處理這一切。
動態生成 Java 類與 AOP 密切相關的。AOP 的初衷在于軟件設計世界中存在這么一類代碼,零散而又耦合:零散是由于一些公有的功能(諸如著名的 log 例子)分散在所有模塊之中;同時改變 log 功能又會影響到所有的模塊。出現這樣的缺陷,很大程度上是由于傳統的 面向對象編程注重以繼承關系為代表的“縱向”關系,而對于擁有相同功能或者說方面 (Aspect)的模塊之間的“橫向”關系不能很好地表達。例如,目前有一個既有的銀行管理系統,包括 Bank、Customer、Account、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 等。

AOP 的利器:ASM 3.0 介紹(1)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 麻豆专区一区二区三区四区五区 | 国产精品久久久久无码人妻 | 性生潮久久久不久久久久 | 久久99国产精品久久99无号码 | 国产欧美精品亚洲桃花岛 | 日韩欧美高清 | 91精品中文字幕一区二区三区 | 清纯唯美亚洲综合激情 | 日日摸日日添夜夜爽97 | 日韩精品视频一区二区三区 | 中文字幕在线精品 | 91在线 | 欧美 | 精品国产一区二区三区香蕉沈先生 | 欧美一区二区三区在线观看免费 | 九九操视频 | 一级做a爰片性色毛片2021 | 欧美精品九九99久久在观看 | 黑人操亚洲人 | 国产a精品三级 | 午夜视频网 | 国产免费一区二区在线看 | 精品国产成a人在线观看 | www.欧美.com | 欧美三极 | 午夜精品一区二区三区在线视频 | 在线视频国产一区 | 国产精品毛片无码 | 国产欧美一区二区成人影院 | jizz.日本| 毛片在线播放网址 | 毛片久久 | 国产精品综合视频 | 奇米影视888狠狠狠777九色 | 99re视频在线观看 | 日本在线观看不卡 | 在线a人片免费观看国产 | 亚洲三级在线 | 性夜影院爽黄e爽痛轻点www | 91拍拍在线观看 | 中文字幕av一区 | 日本高清无遮挡 |