社区
Java EE
帖子详情
如何通过ClassLoader动态加载类?(急急急急急急急急)
moncat
2005-03-01 02:02:11
各位大虾,本人想实现一个功能:java程序运行过程中,我动态修改并重新编译了某个类,如何能够使修改后的类生效?看了半天有关ClassLoader的资料,还是没弄出来,哪为大虾指点?万分感谢!
...全文
695
9
打赏
收藏
如何通过ClassLoader动态加载类?(急急急急急急急急)
各位大虾,本人想实现一个功能:java程序运行过程中,我动态修改并重新编译了某个类,如何能够使修改后的类生效?看了半天有关ClassLoader的资料,还是没弄出来,哪为大虾指点?万分感谢!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jinxfei
2005-03-03
打赏
举报
回复
都通过你的ClassLoader加载?
那你自己是不是要写一个ClassLoader?
如果是,你冲在其中的findClass,然后每次找到后强制加载(java的默认行为是如果已经加载过就不加载)
moncat
2005-03-03
打赏
举报
回复
???
moncat
2005-03-02
打赏
举报
回复
目前最重要的问题:如何能使我的类都通过我的ClassLoader来载入?各位大虾救命啊
moncat
2005-03-01
打赏
举报
回复
不太明白,哪位可以指明点?
如何才能做到跟jsp页面一样,即使修改即时编译使用
llp1217
2005-03-01
打赏
举报
回复
看看我的blog有兩篇文章,希望對你有幫助.
http://blog.csdn.net/llp1217
starsoulxp
2005-03-01
打赏
举报
回复
http://jlife.blogdriver.com/
http://www.cnblogs.com/huqingyu/archive/2004/11/13.html
starsoulxp
2005-03-01
打赏
举报
回复
一个ClassLoader(以下称类加载器) 是一个对象,它负责加载类。ClassLoader类是一个Abstract 类。
如果给了一个类的名字,那么类加载器将会去加载和生成有关构成这个类的定义的数据。典型的策略是将这个类名转换成一个文件名,然后从文件系统中读取这个类文件名。
每个类对象都有一个对其自身类进行定义的类加载器的引用(reference)
多个数组类的类对象不能由类加载器创建,但它们可以根据需要,由java 运行时(runtime)自动创建。针对一个数组类通过Class.getClassLoader()来返回它的类加载器,这个过程和与返回数组里面的元素的类加载器的过程是一样的。但是,如果数组的元素是基本类型(primitive type)的,那么这个数组就没有类加载器。
应用程序为了能具有扩展(extend)JVM动态加载类的能力,它需要实现(implement)类加载器的子类。
类加载器的典型使用是由安全管理者来指定安全域。
一个ClassLoader 类,使用委托(delegation model)模型来查找类和资源。每个ClassLoader 类的实例都有一个向上一级的(父亲)类加载器)的联接。当需要查找类或资源的时候,一个ClassLoader 实例在亲自查找这些资源之前,先将查找任务委托给它的父加载器。在类加载器内部构建虚拟机的类加载器,称为“bootstrap 类加载器”,它本身没有父加载器,但它却可以充当一个ClassLoader 实例的父亲。
通常由JVM从一个由(操作系统)平台支撑的本地文件系统中加载类对象。例如:在 Unix 系统中,文件的路径由CLASSPATH 环境变量定义,JVM 加载类就是从这个路径中提取。
然而,有些类并不存在于一个本地文件,他们可能来自其它的来源,如它们可能来源于网络,也可能由一个应用程序(动态)创建。defineClass()方法 将一个字节数组转换为一个Class类的实例,这个实例可以由Class.newInstance()创建。
由类加载器创建的对象的方法和构造器(constructor)可以引用其它的类。为了确定要引用的类,JVM触发类加载器的loadClass()方法。
例如:一个应用程序可以创建一个网络类加载器,使其能够从服务器端虾子类文件。代码可以如下所示:
ClassLoader loader = new NetworkClassLoader(host, port);
Object main = loader.loadClass("Main", true).newInstance();
. . .
这个网络类加载器子类从网络上加载类,必须定义findClass()方法和loadClassData()方法。一旦它下载了足够的字节,能够组成这个被加载的类,它就会使用defineClass()方法来创建这个类的实例。类加载器实现样例如下:
class NetworkClassLoader extends ClassLoader {
String host;
int port;
public Class findClass(String name) {
byte[] b = loadClassData(name);
return defineClass(name, b, 0, b.length);
}
private byte[] loadClassData(String name) {
// load the class data from the connection
. . .
}
}
[注:]转载
redex
2005-03-01
打赏
举报
回复
关于动态编程,ibm developerworks上有一篇不错的文章,分五部分,楼主可以看看:
http://www-900.ibm.com/developerWorks/cn/java/j-dyn0429/index.shtml
http://www-900.ibm.com/developerWorks/cn/java/j-dyn0603/index.shtml
http://www-900.ibm.com/developerWorks/cn/java/j-dyn0715/index.shtml
http://www-900.ibm.com/developerWorks/cn/java/j-dyn0916/index.shtml
http://www-900.ibm.com/developerWorks/cn/java/j-dyn0203/index.shtml
moncat
2005-03-01
打赏
举报
回复
我不是只一次加载,有可能需要不断重新加载...
急急
急急
急急
急急
急急
急急
这三个
类
msbase.jar, mssqlserver.jar,msutil.jar 加了,sql2000 sp4 、sp3 也安装了 ,1 433端口也开了,在别人的电脑上运行正常,在我还是出现这个问题 大侠们 赶紧帮我解决一下啊 内流感及啊 !!!!!!...
java hgetall_redis调用 hgetAll方法报错,望迅速解决啊
急急
急
严重: Exception starting ... false ----------> Parent
Classloader
: java.net.URL
ClassLoader
@2c7b84de at com.jfinal.plugin.redis.serializer.FstSerializer.valueFromBytes(FstSerializer.java:78) at ...
mysql 中¥与_在JSP中使用mm.mysql.jdbc-2.0pre5连接mysql数据库的问题!!
急急
急!·#·¥#!!!在线给分!!!!!!...
at java.net.URL
ClassLoader
.findClass(URL
ClassLoader
.java:188) at java.lang.
ClassLoader
.loadClass(
ClassLoader
.java:297)驱动接口程序
加载
失败!! at sun.misc.Launcher$App
ClassLoader
.loadClass(Launcher...
全网连夜修复的Log4j漏洞,如何做到一行代码都不改?
可以让开发者不用
急急
忙忙修这个漏洞,甚至你如果完全不想修都可以。 这就是RASP技术。 其实这个技术已经诞生很久了,在安全圈也应用很广泛。应用范围也很广泛了。 RASP RASP 是 Runtime Applicatio
关于Android N不能
加载
.so库的相关问题分析
结果在实际
加载
调用时却报这样的错: E linker : library "/system/lib64/libXXX.so" ("/system/lib64/libXXX.so") needed or dlopened by "/system/lib64/libXXXXXX.so" is not accessible for the namespace: ...
Java EE
67,550
社区成员
225,863
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章