真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java動態(tài)字節(jié)技術(shù)之Javassist-創(chuàng)新互聯(lián)

概述

Javassist是一個開源的分析、編輯和創(chuàng)建Java字節(jié)碼的類庫,可以直接編輯和生成Java生成的字節(jié)碼。相對于bcel, asm等這些工具,開發(fā)者不需要了解虛擬機(jī)指令,就能動態(tài)改變類的結(jié)構(gòu),或者動態(tài)生成類。javassist簡單易用, 快速。

創(chuàng)新互聯(lián)建站IDC提供業(yè)務(wù):成都服務(wù)器托管,成都服務(wù)器租用,成都服務(wù)器托管,重慶服務(wù)器租用等四川省內(nèi)主機(jī)托管與主機(jī)租用業(yè)務(wù);數(shù)據(jù)中心含:雙線機(jī)房,BGP機(jī)房,電信機(jī)房,移動機(jī)房,聯(lián)通機(jī)房。

重要的類

1. ClassPool:javassist的類池,使用ClassPool 類可以跟蹤和控制所操作的類,它的工作方式與 JVM 類裝載器非常相似

2. CtClass: CtClass提供了類的操作,如在類中動態(tài)添加新字段、方法和構(gòu)造函數(shù)、以及改變類、父類和接口的方法。

3. CtField:類的屬性,通過它可以給類創(chuàng)建新的屬性,還可以修改已有的屬性的類型,訪問修飾符等

4. CtMethod:類中的方法,通過它可以給類創(chuàng)建新的方法,還可以修改返回類型,訪問修飾符等, 甚至還可以修改方法體內(nèi)容代碼

5. CtConstructor:與CtMethod類似

在這里小編建了一個前端學(xué)習(xí)交流扣扣群:132667127,我自己整理的最新的前端資料和高級開發(fā)教程,如果有想需要的,可以加群一起學(xué)習(xí)交流

API運用

ClassPool

1	// 類庫, jvm中所加載的class

2 ClassPool pool = ClassPool.getDefault();
3 // 加載一個已知的類, 注:參數(shù)必須為全量類名
4 CtClass ctClass = pool.get("com.itheima.Student");
5 // 創(chuàng)建一個新的類, 類名必須為全量類名
6 CtClass tClass = pool.makeClass("com.itheima.Calculator");

CtField

1	// 獲取已知類的屬性

2 CtField ctField = ctClass.getDeclaredField("name");
3 // 構(gòu)建新的類的成員變量
4 CtField ctFieldNew = new CtField(CtClass.intType,"age",ctClass);
5 // 設(shè)置類的訪問修飾符為public
6 ctFieldNew.setModifiers(Modifier.PUBLIC);
7 // 將屬性添加到類中
8 ctClass.addField(ctFieldNew);

CtMethod

1	// 獲取已有方法

4 //創(chuàng)建新的方法, 參數(shù)1:方法的返回類型,參數(shù)2:名稱,參數(shù)3:方法的參數(shù),參數(shù)4:方法所屬的類
5 CtMethod ctMethod = new CtMethod(CtClass.intType, "calc", new CtClass[]
{CtClass.intType,CtClass.intType}, tClass);
6 // 設(shè)置方法的訪問修飾
7 ctMethod.setModifiers(Modifier.PUBLIC);
8 // 將新建的方法添加到類中
9 ctClass.addMethod(ctMethod);
10 // 方法體內(nèi)容代碼 $1代表第一個參數(shù),$2代表第二個參數(shù)
11 ctMethod.setBody("return $1 + $2;");

2 CtMethod ctMethod = ctClass.getDeclaredMethod("sayHello");

CtConstructor

// 獲取已有的構(gòu)造方法, 參數(shù)為構(gòu)建方法的參數(shù)類型數(shù)組

CtConstructor ctConstructor = ctClass.getDeclaredConstructor(new CtClass[]{});
// 創(chuàng)建新的構(gòu)造方法
CtConstructor ctConstructor = new CtConstructor(new CtClass[]{CtClass.intType},ctClass); ctConstructor.setModifiers(Modifier.PUBLIC);
ctConstructor.setBody("this.age = $1;");
ctClass.addConstructor(ctConstructor);
// 也可直接創(chuàng)建
ctConstructor = CtNewConstructor.make("public Student(int age){this.age=age;}", ctClass);

案例

1.  創(chuàng)建maven工程并添加依賴

Java動態(tài)字節(jié)技術(shù)之Javassist
網(wǎng)站標(biāo)題:Java動態(tài)字節(jié)技術(shù)之Javassist-創(chuàng)新互聯(lián)
文章鏈接:http://weahome.cn/article/dpiojj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部