摘要:動態(tài)生成代碼涉及到了字節(jié)碼操作,通常動態(tài)性兩種常用的實現(xiàn)方式,字節(jié)碼操作,反射。動態(tài)改變某個類的結(jié)構(gòu)。
java動態(tài)生成代碼涉及到了字節(jié)碼操作,通常 java 動態(tài)性兩種常用的實現(xiàn)方式
1,字節(jié)碼操作
2,反射。
運行時操作字節(jié)碼可以實現(xiàn)如下功能
1,動態(tài)生成新的類。
2, 動態(tài)改變某個類的結(jié)構(gòu)。
字節(jié)碼操作 通常比反射開銷小,性能高。
下面就是利用 javassist 動態(tài)生成的一個.class 文件
public static void main(String[] args) throws CannotCompileException, IOException, NotFoundException { ClassPool pool = ClassPool.getDefault(); CtClass ct = pool.makeClass("com.test.bean.Emp"); //創(chuàng)建屬性 CtField e1 = CtField.make("public int no;",ct); CtField e2 = CtField.make("public String name;",ct); ct.addField(e1); ct.addField(e2); CtMethod m1 = CtMethod.make("public int getNo(){return no;}", ct); CtMethod m2 = CtMethod.make("public void setNo(int no){return this.no = no;}", ct); ct.addMethod(m1); ct.addMethod(m2); //添加構(gòu)造器 CtConstructor constructor = new CtConstructor( new CtClass[]{CtClass.intType,pool.get("java.lang.String")},ct);//構(gòu)造器的參數(shù) constructor.setBody("{this.no = no; this.name=name;}");//構(gòu)造器的方法體 ct.addConstructor(constructor);//如果不添加構(gòu)造器 則會生成一個空的構(gòu)造器 ct.writeFile("E:/JavaFile");//將構(gòu)造好的類寫出來 System.out.println("類生成功"); }
代碼生成之后必須使用xjad等反編譯工具進行查看
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/64876.html
摘要:知識點總結(jié)動態(tài)字節(jié)碼操作介紹知識點總結(jié)動態(tài)字節(jié)碼操作運行時操作字節(jié)碼可以讓我們實現(xiàn)如下功能動態(tài)生成新的類動態(tài)改變某個類的結(jié)構(gòu)添加刪除修改新的屬性方法常見的字節(jié)碼操作類庫,這是的項目的一部分。 Java知識點總結(jié)(動態(tài)字節(jié)碼操作-Javassist介紹) @(Java知識點總結(jié))[Java, 動態(tài)字節(jié)碼操作] 運行時操作字節(jié)碼可以讓我們實現(xiàn)如下功能: 動態(tài)生成新的類 動態(tài)改變某個類的結(jié)...
摘要:動態(tài)編程使用場景通過配置生成代碼,減少重復(fù)編碼,降低維護成本。動態(tài)生成字節(jié)碼操作字節(jié)碼的工具有,其中有兩個比較流行的,一個是,一個是。 作者簡介 傳恒,一個喜歡攝影和旅游的軟件工程師,先后從事餓了么物流蜂鳥自配送和蜂鳥眾包的開發(fā),現(xiàn)在轉(zhuǎn)戰(zhàn) Java,目前負責物流策略組分流相關(guān)業(yè)務(wù)的開發(fā)。 什么是動態(tài)編程 動態(tài)編程是相對于靜態(tài)編程而言的,平時我們討論比較多的靜態(tài)編程語言例如Java, 與動態(tài)...
摘要:字節(jié)碼操作動態(tài)性的兩種常見實現(xiàn)方式字節(jié)碼操作反射運行時操作字節(jié)碼可以讓我們實現(xiàn)如下功能動態(tài)生成新的類動態(tài)改變某個類的結(jié)構(gòu)添加刪除修改新的屬性方法優(yōu)勢比反射開銷小性能高性能高于反射低于常見的字節(jié)碼操作類庫這是的項目的一部分是廣泛使用的一種框它 1.字節(jié)碼操作 JAVA動態(tài)性的兩種常見實現(xiàn)方式字節(jié)碼操作 反射 運行時操作字節(jié)碼可以讓我們實現(xiàn)如下功能動態(tài)生成新的類 動態(tài)改變某個類的結(jié)構(gòu)(...
摘要:因此,若想對對象進行修改,必須對其進行解凍,通過方法進行生成一個方法生成一個方法通過反射調(diào)用生成的方法方法體前面和后面加執(zhí)行語句方法體前面通過反射調(diào)用生成的方法張三生成屬性和方法獲取屬性生成構(gòu)造器可以在構(gòu)造器前后加代碼注解操作 Java知識點總結(jié)(動態(tài)字節(jié)碼操作-Javassist的API使用) @(Java知識點總結(jié))[Java, 動態(tài)字節(jié)碼操作] 參考文章: 傳送 操作示例: pu...
摘要:全稱應(yīng)用性能管理監(jiān)控后面我會通過一系列的文章來介紹的原理框架設(shè)計與實現(xiàn)等等。在應(yīng)用構(gòu)建期間,通過修改字節(jié)碼的方式來進行字節(jié)碼插樁就是實現(xiàn)自動化的方案之一。 showImg(https://segmentfault.com/img/bVbbRX6?w=1995&h=1273); 歡迎關(guān)注微信公眾號:BaronTalk,獲取更多精彩好文! 一. 前言 性能問題是導(dǎo)致 App 用戶流失的罪魁...
閱讀 1208·2021-09-30 09:47
閱讀 3758·2021-09-06 15:02
閱讀 1765·2021-09-01 10:46
閱讀 2353·2019-08-30 15:52
閱讀 587·2019-08-29 15:28
閱讀 1868·2019-08-29 15:08
閱讀 1142·2019-08-29 13:28
閱讀 2565·2019-08-29 12:19