社区
Java SE
帖子详情
一个类新加载覆盖原始加载的类的问题
tombow
2010-04-02 06:33:52
我用ASM修改了类,生成了类byte[],最后通过ClassLoader defineClass方法生成了类,请问我怎样将新生成的类,代替Web已经加载的类呢??
...全文
160
15
打赏
收藏
一个类新加载覆盖原始加载的类的问题
我用ASM修改了类,生成了类byte[],最后通过ClassLoader defineClass方法生成了类,请问我怎样将新生成的类,代替Web已经加载的类呢??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tombow
2010-04-08
打赏
举报
回复
看来,这问题是解决不了的了,改问一个别的问题!
JSP里怎样判断客户端与服务器端是否已断开连接..ASP里有个IsClient....属性..
ChDw
2010-04-07
打赏
举报
回复
如果你需要动态加载和覆盖,你应该不断new新的ClassLoader出来,必须用这个新的ClassLoader来定义你的类。这样就可以每次替换了
你原始代码看到的是接口或者基类,
tombow
2010-04-07
打赏
举报
回复
替换了,还是不行.
p2p81
2010-04-07
打赏
举报
回复
你需要知道该类原来是用哪个加载器加载的,如果你修改后的类可以用该类原来的加载器加载的话,你就能把原来的类给替换掉,否则是替换不了的。
tombow
2010-04-07
打赏
举报
回复
Spring使用asm是怎样做的?
taolei
2010-04-06
打赏
举报
回复
怎样替换要你自己在Tomcat想办法。
javaagent是java的启动参数。详细用法见API文档里关于Package java.lang.instrument
tombow
2010-04-06
打赏
举报
回复
[Quote=引用 8 楼 taolei 的回复:]
如果要动态替换的话。
1、替换原来的类加载器
2、用javaagent
[/Quote]
怎样替换原来的加载器?
javaagent咋样用?
Brodie
2010-04-03
打赏
举报
回复
你不可能用一个新加载的类代覆盖旧类
tombow
2010-04-03
打赏
举报
回复
web 加载器 ClassLoader 的defineClass方法是受保护的,怎样将byte[] 转成 class呢??
taolei
2010-04-03
打赏
举报
回复
如果要动态替换的话。
1、替换原来的类加载器
2、用javaagent
taolei
2010-04-03
打赏
举报
回复
把byte[]写成.class文件,替换原来的类文件。
sharke118
2010-04-03
打赏
举报
回复
把这个类都用你自定义的同一个classloader 加载 就可以了吧
tombow
2010-04-03
打赏
举报
回复
不是我想要的.我的意思是:例如Tomcat的加载器加载了A.class,而我修改了A.class,产生了个新的class了,请问我该怎样将新的class覆盖原来的呢??新的A.class我是用不同的classLoader产生的.如果用同一加载器产生的可以覆盖的话,请问我有byte[]的类字节数组,怎样用A.class原来的加载器生成class呢?
Brodie
2010-04-02
打赏
举报
回复
首先用不同加载器加载的类是不同的,你不可能用一个新加载的类代覆盖旧类。
对于这个问题可能的解决方法是手动加载你的新类,
比如:
Object instance = new YourClassLoader().defineClass(bytes).newInstance();
Method m = instance.getclass().getmethod("method").
m.invoke(m, params);
只能通过全部的反射来做,应该是你想要的吧。否则会报CAST错的。
linfanhe
2010-04-02
打赏
举报
回复
不知道啊
相关推荐
java
类
加载
修改源码-pinoc:
一个
用于动态无
类
加载
器修改Android应用程序的新库
java
类
加载
修改源码皮诺克 Pinoc 是
一个
新颖的库,用于对 Android 应用程序进行动态无
类
加载
器修改。 具体来说,Pinoc 支持Java 方法入口处的代码注入,整个Java 方法的代码替换,以及新Java 方法的添加。 特征 提供一种无需 Java
类
加载
器即可进行修补程序部署的新技术。 提供了一种用于动态事件跟踪的新技术。 高兼容性。 Pinoc 可以在所有基于 JVM 的平台上运行。 实时效果。 Pinoc 将在读取指定配置后立即替换或修改这些方法。 原则 构建 Android 应用程序时,Pinoc 插件会将应用程序中的每个 Java 方法替换为其变体。 具体来说,每
一个
方法(原来的方法)替换后,就用它的变体替换。 在运行时,当
一个
方法被调用时,实际调用的是
原始
方法的变体。 变体负责调用其
原始
方法。 然而,在此之前,它首先将有关调用的信息传递给 Pinoc,Pinoc 根据可以从服务器下载的配置文件决定是替换还是修改
原始
方法。 为了避免Java
类
加载
器带来的麻烦,Pinoc没有采用Java
类
加载
器来
加载
和执行对原有方法的替换或修改。 因此,
原始
方法的替换或修改不是用
自定义ClassLoader如何绕过双亲委派机制
双亲委派机制指的是
加载
类
时,会首先从其父
加载
器中去
加载
类
,如果
加载
不到,再从当前
类
加载
器中去
加载
类
。这样的目的就是为了防止我们自定义的一些
类
覆盖
掉启动时的一些核心
类
。 不过,有些场景下,我们想要从自定义的
类
加载
器中
加载
类
时(比如自定义
加载
器和父
加载
器
加载
的是磁盘上两个不同目录下的
类
文件时,如果此时二者目录下都放置着同名的
类
文件,就会发生
覆盖
),这个机制就会给我们带来很大的
问题
。 解决办法:自定义
类
加载
器,开放findClass()方法,直接调用findClass()方法进行
加载
。 理由:ClassLo
03 | 从
覆盖
JDK 的
类
开始掌握
类
的
加载
机制
文章目录从
覆盖
JDK 的
类
开始掌握
类
的
加载
机制
类
加载
过程
加载
验证准备解析初始化
类
加载
器Bootstrap ClassLoaderExtention ClassLoaderApplication ClassLoaderCustom ClassLoader双亲委派机制如何替换 JDK 的
类
从
覆盖
JDK 的
类
开始掌握
类
的
加载
机制 面试题 我们能够通过一定的手段,
覆盖
HashMap
类
的实现么? 有哪些地方打破了 Java 的
类
加载
机制? 如何
加载
一个
远程的 .class 文件?怎样加密 .class
初步了解 Java
类
加载
子系统
Java虚拟机中的
类
加载
器分为两种:
原始
类
加载
器(primordial class loader)和
类
加载
器对象(class loaderobjects)。
原始
类
加载
器是Java虚拟机实现的一部分,
类
加载
器对象是运行中程序的一部分。不同
类
加载
器
加载
的
类
被不同的命名空间所分割。
类
加载
器调用了许多Java虚拟机中其他的部分和java.lang包中的很多
类
。比如,
类
加载
对象就是java.la
Java的
类
加载
器
Java的
类
加载
机制 每
一个
Java程序对应都对应
一个
jvm虚拟机,当程序结束的时候jvm也就对应的结束了。 Java虚拟机中的
类
加载
器分为两种:
原始
类
加载
器(primordial class loader)和
类
加载
器对象(class loader objects)。
原始
类
加载
器是Java虚拟机实现的一部分,
类
加载
器对象是运行中的程序的一部分。不同
类
加载
器
加载
的
类
被不同的
Java SE
62,568
社区成员
307,521
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告