动态加载jar文件并使用xml创建spring bean

问题描述 投票:2回答:1

我有一个应用程序,该应用程序被部署为应用服务器中的war文件。我需要在不停止服务的情况下在jar处添加新的runtime文件。之后,我将根据数据库中存储的bean xml定义创建bean。

我已经在Internet上看到了解决方案,该解决方案使用URLClassLoader加载类,并使用特定的classname加载方法调用。但是我的要求是加载类并能够随时创建bean,而不必担心classnames

我尝试过的代码。

    String pathToJar = "/home/sample.jar";
    JarFile jarFile;
    List<String> classes = new ArrayList<String>();
    try {
        jarFile = new JarFile(pathToJar);
        Enumeration<JarEntry> e = jarFile.entries();
        URL[] urls = { new URL("jar:file:" + pathToJar + "!/") };
        URLClassLoader cl = URLClassLoader.newInstance(urls, AppzillonRestWS.class.getClassLoader());
        int i = 0;
        while (e.hasMoreElements()) {
            JarEntry je = e.nextElement();
            if (je.isDirectory() || !je.getName().endsWith(".class")) {
                continue;
            }
            String className = je.getName().substring(0, je.getName().length() - 6);
            className = className.replace('/', '.');
            Class c = cl.loadClass(className);
            if(className.contains("tbAsmi") && !className.contains("_PK")){
                classes.add(className);
                System.out.println(className);
            }
            i++;
            System.out.println(i);
        }
        jarFile.close();
    } catch (ClassNotFoundException e1) {
        e1.printStackTrace();
    } catch (IOException e1) {
        e1.printStackTrace();
    }

后来我试图从jar加载的类中创建bean。但是得到"ClassNotFoundException"。任何输入将不胜感激。

java spring jar classloader urlclassloader
1个回答
0
投票

发生ClassNotFoundException的原因是无法在Env或classpath中找到类,所以首先请确保是否已加载该类。

© www.soinside.com 2019 - 2024. All rights reserved.