在运行时动态加载jar包容易,但是如果想动态替换运行时的类,需要定义自己的classloader , 用自己的classloader 来load这个类。具体代码如下。
public class UClassloader extends URLClassLoader{ public UClassloader(URL[] urls) { super(urls); } public static void main(String args[]) throws IOException, SecurityException, ClassNotFoundException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, InterruptedException{ File f = new File("/Users/fcc/workspace/edm/myclass.jar"); UClassloader u = new UClassloader(new URL[]{f.toURI().toURL()}); Class<?> cs = u.loadClass("org.apache.lucene.demo.classloader.MyClass"); Interface instance = (Interface)cs.newInstance(); instance.say(); u.close(); Thread.sleep(15*1000); UClassloader uAgain = new UClassloader(new URL[]{f.toURI().toURL()}); Constructor<?> csAgain = uAgain.loadClass("org.apache.lucene.demo.classloader.MyClass").getConstructor(); Interface instanceAgain = (Interface)csAgain.newInstance(); instanceAgain.say(); uAgain.close(); }
注意,想从jar包中加载的类千万不能在现有的JVM中存在, 否则自定义的classloader不会从jar包中加载,而从现有的JVM中查找,加载。
相关推荐
在在不重启tomcat的情况下重新加载类 的一个小例子
struts.devMode=false struts.enable.DynamicMethodInvocation=true struts.i18n.reload=true struts.ui.theme=simple struts.locale=zh_CN struts.i18n.encoding=UTF-8 struts.serve.static.browserCache=false ...
java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader( process.getInputStream())); String freeSpace = "", line; while ((line = in.readLine()) != null) { if (line.length...
word分词是一个Java实现的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。 能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录词。 同时提供了Lucene...
>File的方式来加载JAVA编译后的类文件(*.class)或是类包(*.jar)的,而是通过在Options菜单中的Set Classpath来实现的,单独的类文件可以将它的上一级目录作为Classpath输入,然后再选择Reload Classpath即可。...
<input name="Submit2" type="button" class="btn_grey" value="重置" onClick="window.location.reload();"> <input type="button" name="Submit3" class="btn_grey" value="返回" onClick="history.back(-1...
<constant name="struts.configuration.xml.reload" value="true" /> 6.查看源码:Build path 后的类库中,奶瓶图标找到struts-core-2.5.16.jar 右键-->properties-->java Source Attachment-->External ...
<constant name="struts.counfiguraction.xml.reload" value="true"/> <!-- 指定浏览器输出的编码格式 --> <!--将action内容放在package元素下,package元素的name值与extends值可以使用默认值,如下所示 -...
对于某些Java EE服务器,不支持HttpServlet Request调用getParameterMap()方法,此时可以设置该属性值为true来解决该问题.该属性的默认值是false.对于 WebLogic、Orion和OC4J服务器,通常应该设置该属性为true. struts....
1.11 JavaScript与Java、Java applet 1.12 JavaScript的未来如何 1.13 本章小结 第2章 JavaScript语言入门 2.1 编程准备 2.1.1 编程术语 2.1.2 脚本执行顺序 2.1.3 大小写敏感 2.1.4 空白字符 2.1.5 分号 2.1.6 块 ...
1.11 JavaScript与Java、Java applet 1.12 JavaScript的未来如何 1.13 本章小结 第2章 JavaScript语言入门 2.1 编程准备 2.1.1 编程术语 2.1.2 脚本执行顺序 2.1.3 大小写敏感 2.1.4 空白字符 2.1.5 分号 2.1.6 块 ...
3.5.2 动态类型 3.5.3 内存分配 3.5.4 引用计数 3.5.5 垃圾收集 3.6 第一个Python程序 3.7 相关模块和开发工具 3.8 练习 第4章 Python对象 4.1 Pythonc对象 4.2 ...
3.5.2 动态类型 3.5.3 内存分配 3.5.4 引用计数 3.5.5 垃圾收集 3.6 第一个Python程序 3.7 相关模块和开发工具 3.8 练习 第4章 Python对象 4.1 Python 对象 4.2 ...
RELOAD: 重载访问控制表,刷新日志等。 SHUTDOWN: 关闭MySQL服务。 数据库/数据表/数据列权限: Alter: 修改已存在的数据表(例如增加/删除列)和索引。 Create: 建立新的数据库或数据表。 Delete: 删除表的记录...
RELOAD: 重载访问控制表,刷新日志等。 SHUTDOWN: 关闭MySQL服务。 数据库/数据表/数据列权限: Alter: 修改已存在的数据表(例如增加/删除列)和索引。 Create: 建立新的数据库或数据表。 Delete: 删除表的记录。 ...