java 动态转换器,Java 编程的动态性,第 5 部分: 动态转换类

Java 编程的动态性,第 5 部分: 动态转换类

在经过一段时间的休息之后,Dennis Sosnoski 又回来推出了他的

Java 编程的动态性

列的第 5 部分。您已在前面的文章中看到了如何编写用于转换 Java 类文件以改变代码行为的程序。在本期中,Dennis将展示如何使用

Javassist

框架,把转换与实际的类加载过程结合起来,用以进行灵活的“即时”面向方面的特性处理。这种方法允许您决定想要在运行时改变的内容,并潜地在每次运行程序

时做出不同的修改。在整个过程中,您还将更深入地了解向JVM 中加载类的一般问题。

在第 4 部分“

用 Javassist 进行类转换

”中,您学习了如何使用 Javassist 框架来转换编译器生成的

Java 类文件,同时写回修改过的类文件。这种类文件转换步骤对于做出持久变更是很理想的,但是如果想要在每次执行应用程序时做出不同的变更,这种方法就不一定很方便。对于这种暂时的变更,采用在您实际启动应用程序时起作用的方法要好得多。

JVM

体系结构为我们提供了这样做的便利途径――通过使用 classloader 实现。通过使用 classloader

挂钩(hook),您可以拦截将类加载到 JVM

中的过程,并在实际加载这些类之前转换它们。为了说明这个过程是如何工作的,我将首先展示类加载过程的直接拦截,然后展示 Javassist

如何提供了一种可在您的应用程序中使用的便利捷径。在整个过程中,我将利用取自本系列以前文章中的代码片断。

不要错过本系列的其余文章

第 1 部分,“

类和类装入

”(2003 年 4 月)

第 2 部分,“

引入反射

”(2003 年 6 月)

第 3 部分,“

应用反射

”(2003 年 7 月)

第 4 部分,“

用 Javassist 进行类转换

”(2003 年 9 月)

加载区域

运行 Java 应用程序的通常方式是作为参数向 JVM 指定主类。这对于标准操作没有什么问题,但是它没有提供及时拦截类加载过程的任何途径,而这种拦截对大多数程序来说是很有用的。正如我在第

1 部分“

类和类装入

”中所讨论的,许多类甚至在主类还没有开始执行之前就已经加载了。要拦截这些类的加载,您需要在程序的执行过程中进行某种程度的重定向。

幸运的是,模拟 JVM 在运行应用程序的主类时所做的工作是相当容易的。您所需做的就是使用反射(这是在不得

2 �

相关文档:

哈哈,今天没事做,但心情不错,所以写这篇文章.

类装载器是Java程序运行时不可缺少的一部分,它的任务是把由Java源程序编译成的class文件读入到内存中,确切的说是装入到JVM的内存中,应为JVM是一台抽象的计算机,它有着自己的CPU,内存等. 在class文件中包含了一个类的各种信息,当执行java XXX命 ......

首先介绍 一款小巧的Java IDE - Gel

在《程序员》杂志2006年第4期看到介绍一篇介绍 Free Java IDE的文章,里面提到了Gel这个编译器。于是上网搜了一下,果然找到了,官方网址是:http://memescape.co.uk/gexperts/。最新的版本是RC39,体积很小,安装文件只 ......

一、final

根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。

final类不能被继承,没有子类,final类中的方法默认是final的。

final方法不能被子类的方法覆盖,但可� ......

项目中需要和第三方平台接口,加了来源IP鉴权功能,测试时发现没有问题,但是部署以后发现存在问题,一直鉴权不通过,一群人抓瞎。

我找到那块的代码,跟了一遍流程发现逻辑没有啥问题,但是最终的结果却还是鉴权不通过,实在有些诡异。其基本逻辑为先取得配置的IP列表,然后通过request.getRemoteAddr()取得客户端的IP� ......

从本系列前面的文章中,您了解到反射的性能比直接访问要慢许多倍,并了解了用 Javassist 和 Apache

Byte Code Engineering Library (BCEL)进行classworking。Java 顾问 Dennis

Sosnoski 通过演示如何使用运行时 classworking,来用全速前进的生成代码取代反射代码,从而结束他的 Java 编程的动态性

系列。

既然您已经 ......

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

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

相关文章

乔布斯,影响了一个时代的人

2011年10月5日,苹果公司的创始人史蒂夫乔布斯,因患胰腺神经内分泌肿瘤病逝,享年56岁,一代传奇人物,与世长辞乔布斯被认为是计算机业界与娱乐业界的标志性人物,同时人们也把他视作麦金塔计算机、iPod、iPhon…

考试能帮助我什么?

我毕业三年,毕业于师范计算机系,游走了两年的时间,做专业相关的工作,两次更换工作是感觉以后没有多大的攻势,处于一种服务低端用户的格局,作为我依然心高气盛的,总想着自个的人生辉煌、庞大&…

C++ 版本ORM访问数据库之ODB访问oracle的Demo(三)

ODB的组成部分: 1: 操作系统的ODB编译器 2: odb核心库libodb 3: 各种数据库的相关链接库 使用ODB访问数据需要的库和头文件(不懂, 请看https://www.cnblogs.com/hul201610101100/p/9482311.html): lib库: odb-oracle-d.lib, odb-d.lib (由libodb-oracle-2.4.0编译成功后产生的l…

在8080端口输出php的输出,端口8080上的PHP错误

我安装了Apaache并配置为侦听端口8080已经使用过PHP runner,并将其放在/ apache24 / htdocs下的htdocs文件夹中当我浏览网站locahost:8085时,它工作正常但是当我浏览网站localhost:8080时,它显示下面的错误我想在安装和…

平均年薪60.8万,Linux开发拿下这个证书有多吃香?

互联网行业竞争一年比一年严峻,随着互联网的发展和进步,很多人都是想要进军到编程行业中去,作为工程师的我们唯有不停地学习,不断的提升自己才能保证自己的核心竞争力,打破内卷。从而拿到更好的薪水,进入心…

Linux新手必须掌握的命令(2)

一、输入输出重定向 输入重定向是指把文件导入到命令中,而输出重定向则是指把原本要输出到屏幕的数据信息写入到指定文件中。 在日常的学习和工作中,相较于输入重定向,我们使用输出重定向的频率更高。 所以又将输出重定向分为了标准输出重定向…

极限编程与敏捷开发(4)

解决方案一: 下面图1是一种最简单的解决方案,Switch对象可以轮询真实开关的状态,并且可以发送相应的turnOn和turnOff消息给Light。 图1解决方案二: 上面这个设计违反了两个设计原则:依赖倒置原则(DIP)和开放封闭原则(O…

mm1 matlab,(高质)MM1排队系统仿真matlab实验报告.doc

M/M/1排队系统实验报告一、实验目的本次实验要求实现M/M/1单窗口无限排队系统的系统仿真,利用事件调度法实现离散事件系统仿真,并统计平均队列长度以及平均等待时间等值,以与理论分析结果进行对比。二、实验原理根据排队论的知识我们知道&…

虚拟机四种网络连接模式比较

虚拟机一直用,但选择网络时的四种模式总是搞不清楚,只知道选择bridge最好用。为了能更深入了了解,查询了些资料,总结如下 第一种 NAT模式 Vhost访问网络的所有数据都是由主机提供的,vhost并不真实存在于网络中&#xf…

CPU加了缓存后,有人急了~

Hi,我是CPU一号车间的阿Q,还记得我吗,真是好久不见了~我所在的CPU是一个八核CPU,就有八个工作车间,那运行起来速度杠杆的~虚拟地址翻译一大早,我们一号车间MMU(内存管理单…

redis -- 学习

redis 安装 就不细说了。 可以看这个 地址 https://www.cnblogs.com/feijl/p/6879929.html 配置完成之后 连接不上redis 如果报错守护模式 解决办法 1.修改redis配置 redis.conf 守护模式不启用 如下 2.第二种 启动redis后 设置密码 先查看是否设置了 config get requirepass…

一个学妹写的按键检测函数把我秀翻了!

摘要:今年实验室来了三个学妹,其中一个学妹以前是物联网专业的,进了实验室老师二话没说:先把STM32单片机过一遍上来第一个例程就是使用按键点亮一个LED灯,好家伙。点灯小师弟比较在行,毕竟32、FPGA、Linux的…

java请求servlet,[Java]Servlet发送Post请求

演示实例:AServlet发送一个Student对象到BServlet#### 1.AServlet部分首先造一个学生stu,然后通过fastjson的toJSONString方法把对象转换成字符串,再通过MyHttpUtils的sendPost方法把数据发送到BServlet核心部分是MyHttpUtils类,还…

活动选择

D14554. 活动选择 时间限制:1.0s 内存限制:256.0MB 代码提交间隔:1分钟(现在可以提交) 输入文件名:test.in 输出文件名:test.out 问题描述 假设有一个需要使用某一资源的n个活动组成的集合S,S&…

怎样安装联想慧盾

1.如果是刚买的新计算机里面什么都没有,必须要有联想慧盾盘.2.在启动时,按F4键进行安装,按F10键进行卸载.3.联想慧盾安装过程:T1 200000G NTFS 902(暂…

我爸开车撞人

国庆收假回来的最后一天,我哥给我发消息,给我发了个视频,里面里面有一辆救护车,救护车在呼呼呼的发出声音。然后我以为是我哥出了什么事,就打电话过去,我哥着急的说,是爸妈开车撞人了。之后我打…

Adobe CTO:Android将超预期获50%份额

Adobe首席技术官凯文•林奇近日在《财富》杂志的采访中表达了他对Android操作系统的看法和期望。按照官凯文•林奇的预测,Android将超过业界的预期,在未来半年内将其智能手机份额提升至50%。Adobe凯文•林奇表示,苹果iPhone和黑莓手机的市场份…

女士怎么就不适合PhP呢,女人可以不美丽,但不能不智慧

相信世界上的所有30女人都有一个梦想,那就是希望自己能够有“闭月羞花,沉鱼落雁”的容貌。可是,上天不会将这倾国倾城的美貌平均分到每一个女人身上,而且,假如世界上所有30女人都拥有同样出众的容貌,也就没…

898 C. Phone Numbers

传送门 [http://codeforces.com/contest/898/problem/C] 题意 题意比较难理解直接看样例就知道了,给你个n接下来n行,每行包括一个名字和号码的数量,还有具体的每个号码 让你整理他的电话本,使得一个人的号码不能有重复&#xff0c…

嵌入式行业需要什么样的技术人才?

关注「嵌入式大杂烩」,选择「星标公众号」一起进步!来源 | 巧学模电数电单片机嵌入式行业需要什么样的技术人才?仔细观察各种招聘的岗位要求吧,无非是两方面。1)通用要求比如什么学历,多少年工作经验&#…