一个类新加载覆盖原始加载的类的问题

tombow 2010-04-02 06:33:52
我用ASM修改了类,生成了类byte[],最后通过ClassLoader defineClass方法生成了类,请问我怎样将新生成的类,代替Web已经加载的类呢??
...全文
160 15 打赏 收藏 转发到动态 举报
写回复
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
  • 打赏
  • 举报
回复
不知道啊
相关推荐

62,568

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告