如何使用Java UrlClassLoader重新加载类

如何使用Java UrlClassLoader重新加载类,java,reflection,urlclassloader,Java,Reflection,Urlclassloader,我有一个类的列表,在我的程序执行期间我需要多次使用这些类,我需要以友好的方式加载它们,因为它们的代码可能会经常更改,我希望将它们视为服务,以便可以轻松地更新它们。以下是我的问题: UrlClassLoader是否总是再次加载类,即使它没有更改? 这会导致性能或内存问题吗 以下是我的测试代码: package classloader; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetEx

我有一个类的列表,在我的程序执行期间我需要多次使用这些类,我需要以友好的方式加载它们,因为它们的代码可能会经常更改,我希望将它们视为服务,以便可以轻松地更新它们。以下是我的问题:

UrlClassLoader是否总是再次加载类,即使它没有更改? 这会导致性能或内存问题吗

以下是我的测试代码:

package classloader;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;

public class ClassLoaderClass {
    public static void main(String[] args) throws ClassNotFoundException, MalformedURLException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, InterruptedException {

            //no paramater
            Class noparams[] = {};

        URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{new URL("file:///C:/Users/hm/Documents/classes/")});
        Class gsonClass = urlClassLoader.loadClass("AppTest");
        Constructor constructor = gsonClass.getConstructor();
        Object Apptest = constructor.newInstance();
        Method method = gsonClass.getMethod("printIt",noparams);
        Object returnObj =  method.invoke(Apptest, null);
        String jsonString = (String)returnObj;
}
}


我希望您能帮助我,谢谢。

URLClassLoader检查类是否已经加载并且不再加载。有关详细信息,请参阅。

您是否考虑过使用OSGi,它对加载/停止捆绑包提供了相当强大的支持,允许代码在运行时更改?这似乎很有用,但我有一个非常复杂的应用程序,我正在寻找可以添加到我的应用程序中的东西,以使它能够与某些类一起作为服务工作。在我看来,为了使用OSGI,我必须重新编写我所有的应用程序,我不想这样,如果我错了,请纠正我。这意味着,如果我在加载一个类后更改了它的代码,这些更改将不会被提交?如果是这样的话,我如何才能在发生变化时重新加载类?@Hira你必须重新定义你的类,但我不知道如何访问