1. 程式人生 > >使用ASM實現AOP(2) -- 玩轉 ASM-Bytecode

使用ASM實現AOP(2) -- 玩轉 ASM-Bytecode

轉自:http://my.oschina.net/u/1166271/blog/163550

  本文是《深入位元組碼 -- 使用 ASM 實現 AOP》的後續博文。在上一篇文章中介紹瞭如何使用 ASM 動態安插程式碼到類中,從而簡單實現 Aop。文章得到了廣大朋友好評,我也希望可以不負眾望繼續寫出可以得到大家認可的更多相關文章。廢話不多進入正題。

    古語有云“工欲善其事,必先利其器”。由於 JVM 對位元組碼十分敏感修改過程中稍微有一絲錯誤都會導致虛擬機器錯誤,而想要排查錯誤卻是一件比較困難的事情。再加上後面的博文將會很大程度上依賴 “ASM-Bytecode” 工具。因此我覺得有必要在深入制定位元組碼之前介紹一下如何使用 “ASM-Bytecode” 。

    首先安裝Eclipse外掛,外掛的地址為:“http://andrei.gmxhome.de/eclipse/” 我的 Eclipse 版本為 3.7。

安裝完成之後重啟 Eclipse ,開啟選單 Window -> Show View -> Other... 在分類中選擇 Bytecode 檢視

    為了測試其功能隨便建立一個工程並新建一個 HalloWord 程式,在 Eclipse 中開啟 “HalloWord.java” 程式檢視 Bytecode 檢視,你會得到下面這樣的程式碼。
    (注意:由於Bytecode會自動感知 Eclipse 編輯器中游標位置從而確定生成的程式碼範圍因此初學者建議將游標放到 “main” 方法中)

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 // access flags 0x9 publicstatic main(String[]) : void L0 LINENUMBER22L0 GETSTATIC System.out : PrintStream LDC"Hallo Word" INVOKEVIRTUAL PrintStream.println(String) : void L1
LINENUMBER23L1 RETURN L2 LOCALVARIABLE args String[] L0 L2 0 MAXSTACK = 2 MAXLOCALS = 1
    這是 ASM 為我們生成的 “main” 方法位元組碼指令。點選 “Bytecode” 檢視右上角紅色的 “ASM” 按鈕。ASM便會為我們生成想要的 ASM 程式碼。 ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 { mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "main","([Ljava/lang/String;)V",null,null);

相關推薦

使用ASM實現AOP2 -- ASM-Bytecode

轉自:http://my.oschina.net/u/1166271/blog/163550   本文是《深入位元組碼 -- 使用 ASM 實現 AOP》的後續博文。在上一篇文章中介紹瞭如何使用 ASM 動態安插程式碼到類中,從而簡單實現 Aop。文章得

網際網路金融專案——工作日誌檔案讀取

  換了新工作,部落格停了幾個星期,重新開始堅持碼部落格~不總結,就像出門不穿衣服,彆扭的不行。   最近花兩週做的一個專案,主要是對第三方傳送過來的核心資料進行合併、校驗、加密、壓縮、生成明文,密文的過程。   傳送資料採用的檔案開始使用.xlsx格式,特點就是3個月資料,按月拆分,多

flowable EngineConfiguration的實現分析2

EngineConfiguration的實現類是一個抽象類:AbstractEngineConfiguration 一、引擎配置的分類 繼承 AbsractEngineConfiguration的子類實現不同方面的功能,包括: 1、身份管理引擎配置 2、表單引擎配置

JavaScript自我實現系列2:call,apply,bind

call, apply, bind call 使用: // 1. 定義一個女孩叫x var x = { // 她的身高是170 height: 170, // 她有一雙高跟鞋,作用是讓她長高10釐米 highShoes: function(){ this.

組合語言實現功能2資料複製的實現

問題1:將記憶體ffff:0~ffff:b單元中的資料複製到0:200~0:20b單元中 分析 1、0:200~0:20b單元如何表示 0020:0~0020:b可以等同於以上單元,而且單元的偏移地址是從0開始,和需要複製的單元相同 2、單元中的資料能直接進行復制轉移嗎

嘗試模擬實現AOP

大體思路: 除了模擬實現IOC準備的東西外,還需要準備一套有關攔截器的類以及相關注解; 包括類InterceptorFactory、InterceptorScanner、,註解After、Before、ThorwException、Aspect; 一個描述攔截器的類Interc

Spring中的aop2

用純用純Java的方式實現Spring的切面技術 /*AOP中的一個重要等式:  *     切面=切點+通知    *     advisor=cutpoint+advice &nbs

C++模板實現佇列2

迴圈佇列中新增和刪除元素時並不像鏈式佇列那樣使用動態記憶體分配,一般採用固定的佇列長度,一次分配一片記憶體用於儲存資料,等到佇列使用完畢後釋放掉即可。記憶體使用效率比鏈式佇列高,也比較容易實現。佇列的資料定義如下: unsigned int size;

Mysql千萬資料級分表設計及實現方案2附一致性雜湊原理解析

首先,接著上篇博文:Mysql千萬資料級分表設計及實現方案已經分析了自增id作分表key和全域性服務id(16位)作分表key進行分表的兩種設計方案。自增id優勢在於簡單,直接雜湊取模即可分表完成。根據

Java+Selenium3框架設計準備篇4-TestNG實現DDT2

本篇繼續介紹用TestNG和excel檔案實現DDT場景。我們需要準備一個test-data.xlsx檔案,並且放到eclipse專案下。 1.準備test-data.xlsx檔案 2.利用POI讀取excel檔案內容,並儲存到一個二維陣列中。 package demo;

PoA共識引擎演算法實現分析2

PoA共識引擎演算法實現分析 clique中一些概念和定義 EPOCH_LENGTH : epoch長度是30000個block, 每次進入新的epoch,前面的投票都被清空,重新開始記錄,這裡的投票是指加入或移除signer BLOCK_PERIOD : 出塊時間,

詳解shell指令碼——檔案

批量重新命名和移動檔案 #!/bin/bash #filename: rename.sh #desc: rename .jpg & .png count=1; for img in `find . -iname '*.png' -o -iname '

Redis原始碼分析三十五--- redis.c服務端的實現分析2

       在Redis服務端的程式碼量真的是比較大,如果一個一個API的學習怎麼實現,無疑是一種效率很低的做法,所以我今天對服務端的實現程式碼的學習,重在他的執行流程上,而對於他的模組設計在上一篇中我已經分析過了,不明白的同學可以接著看上篇。所以我學習分析redis服務

Spring AOP高級——源碼實現2Spring AOP中通知器Advisor與切面Aspect

color oaf 小麻煩 ntc tro sta ins pack package 本文例子完整源碼地址:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/Spring%20AO

SpringCloud 二.服務消費者2feign

cover framework version 模式 over 能力 fault ble 路徑 上一篇博客講解了服務消費者的ribbon+restTemplate 模式的搭建,此篇文章將要講解服務消費者feign模式的搭建,這裏是為了普及知識 平時的項目中兩種消費模式選擇其

使用PostSharp在.NET平臺上實現AOP

出處:https://www.cnblogs.com/leoo2sk/archive/2010/11/30/aop-postsharp.html 摘要 本文首先介紹AOP(面向方面程式設計)的相關概念及理論,然後介紹如何使用PostSharp框架在.NET平臺上實現AOP,最後對PostSharp的機制及

Spring22.2 使用 AspectJ實現 AOP

在Spring AOP程式設計中: 分離了重複程式碼:關注點 關注點程式碼:產生類即切面類   一、使用 AspectJ實現 AOP(註解方式): 導包 spring-aop spring-core aspectjrt aspectjweaver aopalli

打造強大的BaseModel2:讓Model實現自動對映,將字典化成Model

這篇文章將講述Model一項更高階也最常用的功能,讓Model實現自動對映–將字典轉化成Model(所有程式碼全由Swift實現) 將JSON轉化為Model的意義 在iOS開發中,基於Model的資料流起到了至關重要的作用。從網路獲取的資料需要進一步處理轉到成View可用的

VS Tools for AI全攻略2低配置虛擬機器也能深度學習,無需NC/NV系列

接著上文VS Tools for AI全攻略,我們來討論如何使用Azure資源來訓練我們的tensorflow專案。Azure雲我個人用得很多,主要是因為微軟爸爸批了150刀每月的額度,我可以愉快地玩耍。 那麼針對Azure,有成套的兩個方案解決問題。 方案一(比較有錢的、對速度要求高的):使用De

Deeplearning4j 實戰2:Deeplearning4j 手寫體數字識別Spark實現

from:http://blog.csdn.net/wangongxi/article/details/54616842 在前兩天的部落格中,我們用Deeplearning4j做了Mnist資料集的分類。算是第一個深度學習的應用。像Mnist資料集這樣圖片尺寸不大,