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

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

系統 1690 0
所謂 Java 類文件,就是通常用 javac 編譯器產生的 .class 文件。這些文件具有嚴格定義的格式。為了更好的理解 ASM,首先對 Java 類文件格式作一點簡單的介紹。Java 源文件經過 javac 編譯器編譯之后,將會生成對應的二進制文件(如下圖所示)。每個合法的 Java 類文件都具備精確的定義,而正是這種精確的定義,才使得 Java 虛擬機得以正確讀取和解釋所有的 Java 類文件。


圖 2. ASM – Javac 流程
圖

Java 類文件是 8 位字節的二進制流。數據項按順序存儲在 class 文件中,相鄰的項之間沒有間隔,這使得 class 文件變得緊湊,減少存儲空間。在 Java 類文件中包含了許多大小不同的項,由于每一項的結構都有嚴格規定,這使得 class 文件能夠從頭到尾被順利地解析。下面讓我們來看一下 Java 類文件的內部結構,以便對此有個大致的認識。
例如,一個最簡單的 Hello World 程序:
            public class HelloWorld {
	public static void main(String[] args) {
		System.out.println("Hello world");
	}
}

          

?

經過 javac 編譯后,得到的類文件大致是:


圖 3. ASM – Java 類文件
圖

從上圖中可以看到,一個 Java 類文件大致可以歸為 10 個項:
  • Magic: 該項存放了一個 Java 類文件的魔數(magic number)和版本信息。一個 Java 類文件的前 4 個字節被稱為它的魔數。每個正確的 Java 類文件都是以 0xCAFEBABE 開頭的,這樣保證了 Java 虛擬機能很輕松的分辨出 Java 文件和非 Java 文件。
  • Version: 該項存放了 Java 類文件的版本信息,它對于一個 Java 文件具有重要的意義。因為 Java 技術一直在發展,所以類文件的格式也處在不斷變化之中。類文件的版本信息讓虛擬機知道如何去讀取并處理該類文件。
  • Constant Pool: 該項存放了類中各種文字字符串、類名、方法名和接口名稱、final 變量以及對外部類的引用信息等常量。虛擬機必須為每一個被裝載的類維護一個常量池,常量池中存儲了相應類型所用到的所有類型、字段和方法的符號引用,因此 它在 Java 的動態鏈接中起到了核心的作用。常量池的大小平均占到了整個類大小的 60% 左右。
  • Access_flag: 該項指明了該文件中定義的是類還是接口(一個 class 文件中只能有一個類或接口),同時還指名了類或接口的訪問標志,如 public,private, abstract 等信息。
  • This Class: 指向表示該類全限定名稱的字符串常量的指針。
  • Super Class: 指向表示父類全限定名稱的字符串常量的指針。
  • Interfaces: 一個指針數組,存放了該類或父類實現的所有接口名稱的字符串常量的指針。以上三項所指向的常量,特別是前兩項,在我們用 ASM 從已有類派生新類時一般需要修改:將類名稱改為子類名稱;將父類改為派生前的類名稱;如果有必要,增加新的實現接口。
  • Fields: 該項對類或接口中聲明的字段進行了細致的描述。需要注意的是,fields 列表中僅列出了本類或接口中的字段,并不包括從超類和父接口繼承而來的字段。
  • Methods: 該項對類或接口中聲明的方法進行了細致的描述。例如方法的名稱、參數和返回值類型等。需要注意的 是,methods 列表里僅存放了本類或本接口中的方法,并不包括從超類和父接口繼承而來的方法。使用 ASM 進行 AOP 編程,通常是通過調整 Method 中的指令來實現的。
  • Class attributes: 該項存放了在該文件中類或接口所定義的屬性的基本信息。
事實上,使用 ASM 動態生成類,不需要像早年的 class hacker 一樣,熟知 class 文件的每一段,以及它們的功能、長度、偏移量以及編碼方式。ASM 會給我們照顧好這一切的,我們只要告訴 ASM 要改動什么就可以了 —— 當然,我們首先得知道要改什么:對類文件格式了解的越多,我們就能更好地使用 ASM 這個利器。

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


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲 欧美 自拍偷拍 | 久久av网 | 成人国产精品一区 | 手机在线看片国产日韩生活片 | 国产欧美日韩精品a在线观看高清 | 国产亚洲精品久久精品录音 | 国产不卡在线观看视频 | 一区二区中文 | 亚洲欧美黄 | 亚洲精选一区 | 亚洲毛片视频 | 日韩免费| 欧美无玛 | 看国产毛片 | 久久99久久99精品免观看不卡 | 亚洲天堂午夜 | 日韩免费电影 | 激情六月丁香婷婷 | 国产精品毛片无码 | 亚洲色图片区 | 色片免费网站 | 成人黄色网址 | 国产精品成人在线观看 | 亚洲精品一区中文字幕乱码 | 日韩免费一区二区三区 | 国产精品91久久久久久 | 久久精品视频99 | 久久综合综合久久 | 免费色网址 | 欧美一区二区三区四区视频 | 国产综合成色在线视频 | 超碰激情| 日本久久综合网 | 99这里只有精品 | 九九色综合网 | 四虎影片 | 人人草草| 日韩一区二区免费看 | 日朝欧美亚洲精品 | 99热久久国产精品这里有9 | 国产一级视频 |