【Javassist】快速入门系列01 使用Javassist实现Hello World

news2024/12/24 22:18:17

系列文章目录

01 使用Javassist实现Hello World


文章目录

  • 系列文章目录
  • 前言
  • 引入Javassist jar包
    • 使用Javassist实现Hello World
  • 总结
  • 说明


前言

本篇文章为Javassist入门系列文章,适合了解Java基础语法的人零基础学会使用Javassist实现一个Hello World程序。


引入Javassist jar包

使用Idea创建一个maven工程,并引入javassist的jar包。

        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.28.0-GA</version>
        </dependency>

使用Javassist实现Hello World

/**
 * 【Javassist】快速入门系列01 使用Javassist实现Hello World
 * 公众号&B站:精致的王同学
 * @author 精致的王同学
 * @date 2022/12/18 23:11
 */
public class Basic01HelloWorld {
    public static void main(String[] args) throws Exception {
        // 获取javassist默认类池
        ClassPool pool = ClassPool.getDefault();
        // 创建Hello类
        CtClass ctClass = pool.makeClass("target.classes.basic.domain.Hello");
        // 创建main方法
        CtMethod ctMethod = CtNewMethod.make("public static void main(String[] args){System.out.println(\"Hello world\");}", ctClass);
         // 将方法添加到ctClass中
        ctClass.addMethod(ctMethod);
        // 将类写成文件
        ctClass.writeFile();

        // 获取生成后类的class文件
        Class<?> helloClazz = ctClass.toClass();
        // 实例化生成后的类
        Object hello = helloClazz.newInstance();
        // 调用生成后的类的main方法
        Method main = helloClazz.getDeclaredMethod("main",String[].class);
        // 调用生成的main方法
        main.invoke(hello,(Object) new String[0]);
    }
}

以上Basic01HelloWorld 类创建了一个main方法,该方法中首先调用ClassPool.getDefault()创建了一个javassist默认的类池,该类池通过调用makeClass方法用于创建target.classes.basic.domain.Hello类。

然后调用CtNewMethod.make方法来创建Hello类的main方法。其中第一个参数为包括方法签名及方法体的字符串。第二个参数为CtClass类的一个实例。本例中代表创建的Hello类的CtClass对象。

创建好main方法之后,调用ctClass.addMethod方法将创建好的方法添加到CtClass类的对象中。最后调用ctClass.writeFile方法将类写成文件。

此时点击运行该类,可以看到target.classes.basic.domain目录下已经生成了一个Hello.class文件

Hello.class文件
之后我们通过ctClass.toClass方法获取生成的class文件,并调用newInstance方法创建它的实例。

通过getDeclaredMethod方法获取Hello类中声明的main方法的对象后,通过invoke方法调用。invoke方法第一个参数为Method 对象,第二个参数为main方法的参数。

注意此处需要用(Object)强制转换,因为invoke方法的第二个参数为Object…类型。

下面是运行结果:
运行结果

总结

本篇文章介绍了使用Javassist创建一个Hello类,并在屏幕输出Hello World。同时也简单介绍了Javassist如何创建类和添加方法。

说明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/99728.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国企招聘: 中国雄安集团2023校园招聘,面向全国,不限户籍

中国雄安集团有限公司2023年校园招聘公告 中国雄安集团有限公司&#xff08;以下简称“中国雄安集团”&#xff09;成立于2017年7月18日&#xff0c;是雄安新区开发建设的主要载体和运作平台。结合雄安新区建设需要&#xff0c;中国雄安集团布局金融与投资、城市发展与城市资源…

高低电平报警器-(模电、数电电子课程设计,毕业设计)Multisim仿真图

目录1 背景与意义1.1 研究背景1.2 研究内容1.3 技术指标2 电路设计2.1 各单元电路设计2.1.1 步进电源电路设计2.1.2 比较电路设计2.1.3 报警电路设计2.2 总体电路设计3 Multisim电路仿真与调试3.1仿真过程3.1.1 步进电源仿真调试3.1.2 总体电路仿真与调试3.2仿真结果分析4 总结…

Java项目:SSM婚纱影楼摄影商城项目网站

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台&#xff0c;前台为普通用户登录&#xff0c;后台为管理员登录&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录…

R语言学习笔记——高级篇:第十四章-主成分分析和因子分析

R语言 R语言学习笔记——高级篇&#xff1a;第十四章-主成分分析和因子分析 文章目录R语言前言一、R中的主成分和因子分析二、主成分分析2.1、判断主成分的个数2.2、提取主成分2.3、主成分旋转2.4、获取主成分得分三、探索性因子分析3.1、判断需提取的公共因子数3.2、提取公共…

uboot启动流程

目录 1. 从汇编到C语言 1. 从汇编到C语言 uboot整个程序的入口是 ./arch/arm/lib/vectors.S 的 start 其中&#xff0c;reset 来自于 ./arch/arm/cpu/armv7/start.S&#xff0c; ./arch/arm/cpu/armv7/start.S 程序的执行路径为 reset --> save_boot_params_ret --> cp…

【C语言数据结构(基础版)】第四站:栈和队列

目录 一.栈的表示和实现 1.栈的概念及结构 2.栈的实现 二、栈的实现 1.栈的声明和定义 2.栈的初始化 3.栈的销毁 4.入栈 5.出栈 6.返回栈顶元素 7.返回栈的元素个数 8.栈是否为空 9.测试 三、栈的完整代码 四、队列的表示和实现 1.队列的概念和结构 2.队列的实现…

光环:工业互联网探索及案例——杨宝刚

摘要&#xff1a;文章内容主要来源于光环国际2022年第三届中国科创者大会杨宝刚老师的分享&#xff0c;原分享名称为"工业互联网助力企业数智化转型"。讲述了工业互联网概念及用友锅炉的一个实例运用。业互联网是一个整合平台&#xff0c;把你的需求告诉平台&#xf…

比亚迪携手亚洲足球小姐王霜发布品牌广告:为梦想,一路向前

在世界杯进入半决赛的最后一天——12月15日&#xff0c;比亚迪发布了全新的品牌宣传片《为梦想&#xff0c;一路向前》&#xff1a;携手亚洲足球小姐王霜&#xff0c;通过足球与梦想的故事&#xff0c;向每一位勇敢前行的追梦人致敬。业内几乎所有人都肯定了此次合作&#xff0…

java基于微信小程序的点餐系统-计算机毕业设计

开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;…

JavaEE【Spring】:SpringMVC 程序开发

文章目录一、概念1、MVC 定义2、MVC 和 Spring MVC 的关系3、Spring MVC 和 Spring 的关系二、Spring MVC 创建和连接1、创建 Spring MVC 项目① 对比② 注意2、RequestMapping 注解介绍3、RequestMapping 是 post 还是 get 请求&#xff1f;① GET② POST4、GetMapping 和 Pos…

Transformer16 ~Robotics

还是Transformer相关 ,谷歌机器人团队等提出了 Robotics Transformer 1 (RT-1)。这是一种多任务模型&#xff0c;可以 tokenize 机器人的输入和输出动作&#xff0c;从而在运行时实现高效推理&#xff0c;使实时控制成为可能。 论文 1&#xff1a;RT-1: Robotics Transformer …

最强工程项目进度计划管理系统Oracle Primavera P6软件最新版本 22.12发布啦,新特征介绍

目录 一&#xff1a;前言 二&#xff1a;P6 22.12 新特征&#xff08;EN&#xff09; 三&#xff1a;P6 22.12 新特征&#xff08;CN&#xff09; 一&#xff1a;前言 近日&#xff0c;甲骨文(Oracle)公司发布了最新版本Primavea P6 2022版&#xff0c;最新版本号 22.12 Or…

day23 整合xxl-job上传近三天秒杀商品

整合xxl-job 1.部署调度中心 将doc目录下的sql脚本导入数据库 修改日志位置 maven打包mvn pageage -Dmaven.skip.testtrue 后台方式启动 nohup java -jar xxl-job-admin-2.3.0.jar > tag-web.log 2>&1 & 访问localhost:端口/xxl-job-admin 2.部署执行器…

[附源码]Nodejs计算机毕业设计基于疫情防控的超市管理系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

Innodb存储引擎-表(约束、视图、物化视图、分区表)

文章目录约束(数据完整性)视图物化视图分区表概述分区类型子分区分区和性能在表和分区间交换数据约束(数据完整性) 关系型数据库系统和文件系统的一个不同点是&#xff0c;关系数据库本身能保证存储数据的完整性&#xff0c;不需要应用程序的控制&#xff0c;而文件系统一般需…

ArcGIS Pro 加载项(6)——样式符号属性对调

之前是已经通过Python构建脚本工具&#xff0c;实现了stylx文件的符号属性的对调。 ArcGIS Pro脚本工具&#xff08;12&#xff09;——样式符号属性对调_学学GIS的博客-CSDN博客为地类做样式符号匹配经常碰到这样的问题&#xff1a;属性表里面只有地类代码&#xff0c;但是做…

win10+VS2017+OpenGL ES3.0 环境配置 源码编译及示例运行

win10VS2017OpenGL ES3.0 环境配置 源码编译及示例运行 win10VS2017OpenGL ES3.0 环境配置 源码编译及示例运行 本人参考其他人的博客内容学习opengles3.0编程指南&#xff0c;并在win10系统上用VS2017对OpenGL ES3.0 进行了实际的环境配置及源码编译。 一、环境准备工作 1…

Java项目:SSM网上药品销售商城网站系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本系统分为前后台&#xff0c;分为管理员与普通用户两种角色&#xff0c;前台由普通用户登录&#xff0c;后台由管理员登录&#xff1b; 管理员…

架构师必读 —— 逻辑模型(3)

逻辑思考总是从提问“为什么”开始 培养逻辑思考习惯的捷径之一&#xff0c;就是经常问自己“为什么”。无论收到什么信息&#xff0c;都应该试着问一句“为什么”。 举个例子&#xff0c;A公司收购了其他竞争公司。为什么会收购呢&#xff1f; 这其中隐藏着A公司的发展战略。另…

闲置物品交易系统

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 基于55m闲置物品交易系统 网站前台&#xff1a;关于我们、联系我们、公告信息、闲置物品、求购信息 管理员功能&#xf…