`
sharp-fcc
  • 浏览: 110403 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java class reload 动态加载

阅读更多

在运行时动态加载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中查找,加载。

分享到:
评论

相关推荐

    java class reload

    - JRebel通过替换Java虚拟机(JVM)的类加载机制,使得已加载的类可以被动态替换,达到热重载的效果。 3. **Tomcat自带的Class reloading** - Tomcat在开发模式下,可以通过设置`reloadable=true`在`conf/server....

    linux上通过sh方式启动java jar程序并做为守护进程

    为了使其成为守护进程,通常会将此脚本添加到系统的启动脚本或服务管理系统(如Systemd或init.d)中,这样每次系统启动时都会自动启动Java应用。 在Systemd环境下,你可以创建一个名为`application.service`的服务...

    . .

    6. **ReloadClass.java**:这个文件可能包含了实际的类重载逻辑,它可能使用了如Java的反射API(java.lang.reflect)或者动态代理(java.lang.reflect.Proxy)来实现类的动态修改和重新加载。 总结起来,Java的类...

    Java动态修改配置即时生效的方式WatchService

    当配置文件被修改时,`WatchThread`会接收到事件并调用`reloadConfig()`方法重新加载配置。这种方式极大地简化了开发和测试流程,避免了频繁的打包和重启。 不过,对于大型项目或Spring Boot应用,由于通常被打包为...

    java教程二第2章Java环境和工具.pdf

    例如,设置`JAVA_HOME`环境变量来指定JDK的安装目录,并将`%JAVA_HOME%\bin`添加到系统路径`PATH`中,以便能在任何目录下运行Java命令。 3. Java工具介绍: - `appletviewer`:一个用于运行applet小程序的工具。 - ...

    LayUI table 刷新页面不重置页码

    为了实现页码重置,我们需要在`reload`函数中添加一个条件判断,当刷新时,如果希望页码重置,就将页码设置为1。 具体修改的源码可能如下: ```javascript // 原始的table.reload方法 table.reload = function(id,...

    Struts2+spring2+hibernate3实例源码-java源码

    2. **搭建开发环境**:创建新的Web项目,并添加Struts2、Spring2和Hibernate3的相关库文件。 #### 四、数据库设计 为了演示整合流程,我们设计了一个简单的用户表`user`,包含字段`userid`、`username`、`password...

    ServiceLoader的使用

    ServiceLoader是Java中的一种服务加载机制,它位于`java.util.ServiceLoader`类中,主要用来发现并加载符合特定接口的实现类。这个机制是Java SPI(Service Provider Interface)的一部分,允许开发者在不修改代码的...

    jsp探针 ver0.1

    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...

    如何实现动态IP的域名解析

    程序的关键逻辑在于从客户端接收指令,更新动态文件中的IP地址,并重新加载DNS服务。 ```java import java.io.*; import java.net.*; public class ThreadDNSReloadServer { public static void main(String[] ...

    java中文乱码解决方案

    &lt;filter-class&gt;org.apache.struts2.dispatcher.ActionContextCleanUp&lt;/filter-class&gt; &lt;filter-name&gt;struts-cleanup &lt;url-pattern&gt;/* ``` 这种方法可以在请求进入Action之前就设置好字符编码,避免乱码问题。...

    中文分词工具word-1.0,Java实现的中文分词组件多种基于词典的分词算法

    word分词是一个Java实现的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。 能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录词。 同时提供了Lucene...

    springMVC样例、jreloader实现tomcat热部署

    java -jar start.jar reload=true ``` 在实际应用中,为了更好地利用jreloader,我们还需要注意以下几点: 1. 只有Java类文件的更改会被jreloader捕捉并触发热部署,静态资源(如HTML、CSS、JavaScript)的更改需要...

    jode_1.0.5

    &gt;File的方式来加载JAVA编译后的类文件(*.class)或是类包(*.jar)的,而是通过在Options菜单中的Set Classpath来实现的,单独的类文件可以将它的上一级目录作为Classpath输入,然后再选择Reload Classpath即可。...

    android使用RxJava实现预加载

    此外,`reload()`方法可以用来重新触发数据加载,这对于数据更新或者在特定条件下重新预加载很有用。 总结来说,通过使用RxJava的BehaviorSubject,我们可以轻松地在Android应用中实现预加载功能。这个解决方案既...

    JAVAEE 试题

    5. JSP(JavaServer Pages)是动态网页技术,允许在HTML中嵌入Java代码。Servlet是Java的Web服务组件,处理HTTP请求。JSP最终会被转换成Servlet执行。 6. JSP内置对象包括:request、response、session、...

    安卓webview顶部加载进度条提示,提供下拉刷新页面功能

    本篇文章将详细讲解如何在安卓Webview中添加顶部加载进度条提示以及实现下拉刷新页面的功能。 首先,我们来探讨Webview的顶部加载进度条。在默认情况下,Android的Webview并不显示加载进度,但用户通常希望看到页面...

    如何正确地删除目录树中的节点

    在这个例子中,我们重写了`populateTreeItem`方法来添加自定义的行为,以处理节点的点击事件,并设置相应的样式。通过`getCurrentModelObject()`方法可以获取到当前节点的信息,然后根据是否被选中来更改其样式。 #...

    封装web请求

    1. 创建`WebView`对象:在XML布局文件中添加`WebView`组件,或者在Java/Kotlin代码中动态创建。 2. 初始化`WebView`:启用JavaScript、禁用内置缩放、设置Web视图加载进度等。 3. 设置`WebViewClient`:处理页面加载...

Global site tag (gtag.js) - Google Analytics