首页 > 编程语言 >Javassist实例

Javassist实例

时间:2024-01-10 17:35:53浏览次数:37  
标签:ClassPool HelloWorld CtMethod 实例 CtClass Javassist public javassist

Javassist强调源代码层次操作字节码的框架。

利用Javassist实现字节码增强时,可以无须关注字节码的结构,其优点在于编简单。直接使用Java编程的形式,而不需要了解虚拟机指令,就能动态改变类的结构或者动态生成的类。

其中最重要的是ClassPool、CtClass、CtMethod、CtField这四个类:

CtClass:编译时类信息,它是一个class文件在代码中的抽象表现形式,可以通过一个类的全限定名来获取一个CtClass对象,用来表示这个类文件。

ClassPool:ClassPool是一张保存CtClass信息的HashTable,key为类名,value为类名对应的CtClass对象。当需要对某个类进行修改时,就是通过pool.getCtClass("className")方法从pool中获取到相应的CtClass。

CtMethodCtField:对应的是类中的方法和属性。

package com.study.demo.bytecode.javassist;

public class HelloWorld {
    public void sayHello(){
        System.out.println("Hello,World!");
    }
}

实例代码:

import org.apache.ibatis.javassist.ClassPool;
import org.apache.ibatis.javassist.CtClass;
import org.apache.ibatis.javassist.CtMethod;

public class JavassistTest {

    public static void main(String[] args) throws Exception {

        ClassPool cp = ClassPool.getDefault();
        CtClass cc = cp.get("com.study.demo.bytecode.javassist.HelloWorld");
        CtMethod m = cc.getDeclaredMethod("sayHello");
        m.insertBefore("{ System.out.println(\"start\"); }");
        m.insertAfter("{ System.out.println(\"end\"); }");
        Class c = cc.toClass();

        HelloWorld h = (HelloWorld)c.newInstance();
        h.sayHello();
    }
}

输出结果:

start
Hello,World!
end
Process finished with exit code 0


标签:ClassPool,HelloWorld,CtMethod,实例,CtClass,Javassist,public,javassist
From: https://blog.51cto.com/u_11315052/9183067

相关文章

  • MATLAB的Simulink使用及实例
    MATLAB的Simulink使用及实例今天我们来新建一个如图所示的simulink文件新建一个Simulink有两种方法第一种在命令行直接输入similink,然后回车键就好了(注意simulink第一个S是小写哦)第二种我们可以直接在MATLAB上面找到simulink,如下图所示点进去就可以了点进去之后会出现......
  • 在Python中,classmethod是一个修饰符,它用于指定类中的某个方法为类方法1。这种方法不需
    classA(object):bar=1deffunc1(self):print('foo')@classmethoddeffunc2(cls):print('func2')print(cls.bar)cls().func1()A.func2()#不需要实例化Ins=A()Ins.func1()#需要实例化在Pyth......
  • 边缘人工智能实例探究
    边缘人工智能(EdgeAI)是一种专注于在边缘设备上进行数据处理和决策的人工智能技术,而不是完全依赖于云计算或远程服务器。其核心思想是将AI模型和算法嵌入到终端设备,使其能够在本地执行实时的数据分析和决策,从而降低延迟并提高数据的安全性和隐私保护。以下是边缘人工智能的一些实例......
  • php rsa加密(非对称)实例 以及使用哈希256进行加密
    functiongetEncryptionUserID($client_secret):string{$str="-----BEGINPUBLICKEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpw/k/rPHx4c1nEO8lQr8Fkz2MMTnqNbspRox1f2snoDNcssTQxg9TyBOMujQy14eRibKE+X+qPVeZJyyfruTrtvB4EomJL7v4URcacg7H00A2HL1nf7......
  • 探讨JS混淆技术及其加密解密实例
    引言在当前计算机科学领域中,保护软件代码的安全性和隐私性变得愈发重要。为了防止黑客攻1击和恶意软件分析,开发人员采用各种技术来混淆和加密其代码,其中包括JS混淆技术。本文将介绍JS混淆技术的原理和应用,并提供一些相关的加密解密实例。一、JS混淆技术简介JS混淆技术是一种通过......
  • [FortiGate] FG-VM安全防火墙初始化配置实例
    FortiGateFirewall是什么?FortiGate防火墙是一种网络安全设备,主要用于保护企业网络免受各种网络威胁和入侵。它具有以下主要功能:防火墙功能:FortiGate防火墙可以检测和阻止未经授权的网络流量,通过设置访问规则来控制网络流量的进出。它可以防止恶意入侵、拒绝服务和其他网络威胁。......
  • Vue2 中每个组件实例都对应一个 watcher 实例?.
    Vue2中每个组件实例对应一个渲染Watcher实例,用于监听组件的响应式数据变化并更新视图。除了渲染Watcher,还可以通过watch属性来创建额外的Watcher实例,用于监听特定的数据变化。在Vue2中,每个组件实例都有一个$watch方法,可以用于创建Watcher实例。......
  • 【AI 实战】Text Processing and Word Embedding 文本处理以及词嵌入原理和代码实例讲
    文章目录【AI实战】TextProcessingandWordEmbedding文本处理以及词嵌入原理和代码实例讲解TexttoSequenceStep1:TokenizationStep2:BuildDictionaryStep3:One-HotEncodingStep4:AlignSequencesTextProcessinginKerasWordEmbedding:WordtoVectorHowtom......
  • Tdsql(mysql版本)实例扩容
    一、执行阶段:1、【实例管理】>【实例详情】>【扩(缩)容】->【扩(缩)容非分布式实例】2、将实例设置修改为:16c,32g3、点击“确定”二、验证阶段:【实例管理】>【实例详情】  查看实例规格,应该修改为了:16c,32g三、回退阶段:1、【实例管理】>【实例详情】>【扩(缩)容】->【扩(缩)容非......
  • SpringBoot2 整合 Eurkea 实例
    文章目录1.概述2.注册示例2.1工程目录2.2引入依赖2.3启动类2.4配置文件2.5启动服务注册中心3.服务提供者(eurekaclient)实例3.1工程目录3.2引入依赖3.3Java源文件3.5配置文件3.6启动服务提供者参考文献1.概述Eurkea主要负责服务治理功能。服务治理主要用来实现各......