我们大家都知道,每个运行中的线程都有一个成员contextClassLoader,用来在运行时动态地载入其它类。
系统默认的contextClassLoader是systemClassLoader,所以一般而言java程序在执行时可以使用JVM自带的类、$JAVA_HOME/jre/lib/ext/中的类和$CLASSPATH/中的类,对于非默认的jar,一般只能手动在配置环境添加。
但事实上,我们可以通过Thread.currentThread().setContextClassLoader()更改当前线程的contextClassLoader行为,实现在程序内加载外部jar。
PS:
ClassLoader的工作原理是:
1) 线程需要用到某个类时,contextClassLoader将被请求来载入该类
2) contextClassLoader请求它的父ClassLoader来完成该载入请求
3) 如果父ClassLoader无法载入类,则contextClassLoader试图自己来载入
运行示例:
本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/cping1982/archive/2007/11/12/1880490.aspx
本文介绍了一种在Java程序中动态加载外部Jar包的方法,通过自定义的JarLoader类实现对类的加载,并提供了完整的代码示例。该方法允许在不重启应用的情况下引入新的类库。
6643

被折叠的 条评论
为什么被折叠?



