第五篇 java位元組碼操作

來源:互聯網
上載者:User

標籤:addm   ssi   spool   size   測試   相關   desktop   rar   main   

  java動態性的兩種常見的實現方式:

①位元組碼操作

②反射

運行時操作位元組碼可以讓我們實現如下功能:

①動態產生新的類

②動態改變某個類的結構(添加、刪除、修改  新的屬性或方法)

優點:

比反射的開銷小,效能高

Javassist效能高於反射,低於ASM

BCEL(Byte Code Engineering Library):

是java classworking 廣泛使用的一種架構,它可以讓你深入JVM組合語言進行類操作的細節。BCEL與Javassist有不同的處理位元組碼的方法,BCEL在實際的JVM指令層次上進行操作(BCEL擁有豐富的JVM指令級支援)而javassist所強調的是原始碼層級的工作。

ASM:

是一個輕量級java位元組碼操作架構,直接涉及到JVM底層的操作和指令。

CGLIB(Code Generation Library):

是一個強大的,高效能,高品質的code產生類庫,基於ASM實現。

javassist:

是一個開源的分析、編輯和建立java位元組碼的類庫。效能比ASM差,與cglib差不多,但是使用簡單,很多開源架構都在使用。

匯入javassist.jar包:

 

 1 /** 2  *  3  * 測試使用javassist產生一個新的類 4  * 5  * @author Zhang XiaoDao 6  * 7  */ 8 public class Demo01 { 9     public static void main(String[] args) throws Exception {10         //擷取預設的類池11         ClassPool pool = ClassPool.getDefault();12         //需要建立的類13         CtClass cc = pool.makeClass("com.zzp.bean.Emp");14         15         //建立屬性,也可以給屬性賦值16         CtField f1 = CtField.make("private int empno", cc);17         CtField f2 = CtField.make("private String ename", cc);18         cc.addField(f1);19         cc.addField(f2);20         21         //建立相關的方法22         //建立set/get方法23         CtMethod.make("public int getEmpno(){return empno;}", cc);24         CtMethod.make("public void setEmpno(int empno){this.empno = empno;}", cc);25         26         CtMethod m1 = CtMethod.make("public String getEname(){return ename;}", cc);27         CtMethod m2 = CtMethod.make("public void setEname(String ename){this.ename = ename;}", cc);28         cc.addMethod(m1);29         cc.addMethod(m2);30         31         //添加構造器32         CtConstructor constructor = new CtConstructor(new CtClass[]{CtClass.intType,pool.get("java.lang.String")33         },cc);34         //設定構造器的方法體,method也能設定方法體35         constructor.setBody("{this.empno=empno; this.ename=ename;}");36         cc.addConstructor(constructor);37         38         //將上面寫好的類產生到案頭39         cc.writeFile("c:/desktop");40         System.out.println("產生類成功");41     }42 }

 

第五篇 java位元組碼操作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.