1. 程式人生 > >java的動態性------Java位元組碼操作

java的動態性------Java位元組碼操作

常見的位元組碼操作類庫

BECL :是java classing廣泛使用的一種框架,可以深入理解JVM組合語言,難學,需要一些JVM底層指令

ASM :輕量級的java位元組碼操作框架,直接涉及JVM底層操作和指令

CGLIB  :是基於ASM的的實現,強大效能高

Javassist  :開源簡單 支援java level  和bytecode level來操作位元組碼  簡單,效能相對BECL,ASM效能低下,和CGLIB差不多

               (1) AOP  Javassist  是一個很好的工具實現AOP,動態修改方法,給方法中的一行前面後面或者both新增程式碼

              (2) Reflection  Javassist 裡面的很多方法和Reflection中一樣  CtField對應Field CtMethod 對應Method。還有                          就是你在動態的加入了新的方法或者修改方法之後,通過一般的new建立物件是呼叫不到的,所有通過反射物件來呼叫。

                    Javassist  缺點:不支援泛型 列舉  不能修改註解 不支援內部類  匿名類  不支援陣列的初始化 不支援continue break也不能支援某些繼承

相關推薦

java動態性------Java位元組操作

常見的位元組碼操作類庫BECL :是java classing廣泛使用的一種框架,可以深入理解JVM組合語言,難學,需要一些JVM底層指令ASM :輕量級的java位元組碼操作框架,直接涉及JVM底層操作和指令CGLIB  :是基於ASM的的實現,強大效能高Javassist

8.5(java學習筆記)8.5 位元組操作(javassist)

一、javassist   javassist讓我們操作位元組碼更加簡單,它是一個類庫,允許我們修改位元組碼。它允許java程式動態的建立、修改類。   javassist提供了兩個層次的API,基於原始碼級別的和位元組碼級別的。     二、javassist建立類   1.獲取類池

Java學習之動態編譯--位元組操作--javassist類庫

一、位元組碼操作 1.Java動態性的兩種常見實現方式: 位元組碼操作反射 2.執行時操作位元組碼可以實現如下功能: 動態生成新的類動態改變某個類的結構(新增/刪除/修改 新的屬性/方法) 3.優勢: 比反射開銷小,效能高Javaasist效能高於反射,低於ASM 二、常見

java 位元組操作(javassist)

用javassist生成一個類(位元組碼檔案) /** * 使用javassist生成一個新的類 * @author L J */ public class JavassistDemo { public static void main(Stri

Java位元組操作類庫Javassist概述

Javassist(Java Programming Assistant)是一款編輯Java位元組碼的類庫。能夠在執行時定義新的Java類,在JVM載入類檔案時修改類的定義。 Javassist類庫提

JAVA 位元組操作利器javassist

1、簡介 javassist是一個開源的分析、編輯和建立java位元組碼的類庫。不需要了解虛擬機器指令,就能動態生成類或者改變類的結構。 2、下載 (2)使用的版本是javassist-3.18.0-GA。 Javassist是一個執行位元組碼操作的強而有力

014-java中的位元組物件

    String string = "abc"; Class cls1 = string.getClass(); Class cls2 = String.class; Class cls3 = Class.forName("java.lang.String");

Java程式碼到位元組——第一部分

原文地址 作者:James Bloom 譯者:張坤 理解在Java虛擬機器中Java程式碼如何別被編譯成位元組碼並執行是非常重要的,因為這可以幫助你理解你的程式在執行時發生了什麼。這種理解不僅能確保你對語言特性有邏輯上的認識而且做具體的討論時可以理解在語言特性上的妥協和副作用。 這篇文章講解了

jdk原始碼解析(八)——Java虛擬機器位元組執行引擎

在前面我們瞭解了jvm執行時資料區,那個jvm圖中有執行引擎,那麼今天就解釋一下Java虛擬機器位元組碼執行引擎。 1 定義 Java虛擬機器位元組碼執行引擎是jvm最核心的組成部分之一,“虛擬機器” 是一個相對於 “物理機” 的概念,這兩種機器都有程式碼執行能力,其區別是物理機的執行

深入理解Java虛擬機器 位元組執行引擎

執行時棧幀結構 在JVM基本框架中已經提到過棧幀Frame結構。 區域性變量表 區域性變量表以Slot為基本單位,int,float,reference,boolean, byte都佔1 Slot;long和double資料被切割成連續2 Slot

java虛擬機器位元組執行引擎之解釋執行

java語言中,Javac編譯器完成了程式程式碼經過詞法分析,語法分析到抽象語法樹,再遍歷語法樹生成線性的位元組碼指令流的過程.這一部分動作是在java虛擬機器外部完成的,而直譯器是在虛擬機器內部的,Java程式的編譯是半獨立的實現. 直譯器負責對Javac編譯器輸出的指令

位元組操作_javassist庫_動態建立新類_屬性_方法_構造器_API詳解JAVA216-217

來源:http://www.bjsxt.com/ 一、S02E216_01位元組碼操作_javassist庫、介紹、動態建立新類、屬性、方法、構造器 位元組碼操作 常見的位元組碼操作類庫 JAVAssist庫 package com

[譯]深入位元組操作:使用ASM和Javassist建立稽核日誌

深入位元組碼操作:使用ASM和Javassist建立稽核日誌 在堆疊中使用Spring和Hibernate,您的應用程式的位元組碼可能會在執行時被增強或處理。 位元組碼是Java虛擬機器(JVM)的指令集,所有在JVM上執行的語言都必須最終編譯為位元組碼。

位元組操作庫Javassist

一:建立新類: package com.chen.Base_Points; import javassist.ClassPool; import javassist.CtClass; import javassist.CtConstructor; import javas

關於360外掛化Replugin Activity動態修改父類的位元組操作

開發十年,就只剩下這套架構體系了! >>>   

[三] java虛擬機器 JVM位元組 指令集 bytecode 操作 指令分類用法 助記符

上面關於dup的描述摘自 虛擬機器規範,很難理解看起來是非常難以理解的,不妨換一個角度我們知道區域性變數的空間分配分為兩種long 和 double 佔用2個slot  其他佔用一個運算元棧,每個單位可以表示虛擬機器支援的任何的一個數據型別不過運算元棧其實同區域性變數一樣,他也是被組織一個數組, 每個元素的資

java虛擬機器5 位元組

  java位元組碼本質是java程式的格式化表示,便於機器處理。所以他是java程式的另一種表示,java程式包含的資訊他都包含並且更加結構化。   java虛擬機器位元組碼格式:  magic   魔數,標識該檔案是一個位元組碼檔案。 minor_version major_ver

java反射機制——獲取位元組對應類中的函式

package cn.itcast.reflect.demo; import java.lang.reflect.Constructor; import java.lang.reflect.Method; //獲取類中的函式 public class ReflectDemo4 { public

java反射機制——獲取位元組對應類中的欄位

package cn.itcast.reflect.demo; import java.lang.reflect.Field; public class ReflectDemo3 { public static void main(String[] args) throws ClassNot

java反射機制——獲取位元組對應類的物件

package cn.itcast.reflect.demo; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import cn.itcast.bean.demo