⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 compositeclassloader.java

📁 xstream是一个把java object序列化成xml文件的开源库,轻便好用
💻 JAVA
字号:
package com.thoughtworks.xstream.core.util;import java.util.ArrayList;import java.util.Collections;import java.util.Iterator;import java.util.List;/** * ClassLoader that is composed of other classloaders. Each loader will be used to try to load the particular class, until * one of them succeeds. <b>Note:</b> The loaders will always be called in the REVERSE order they were added in. * * <p>The Composite class loader also has registered  the classloader that loaded xstream.jar * and (if available) the thread's context classloader.</p> * * <h1>Example</h1> * <pre><code>CompositeClassLoader loader = new CompositeClassLoader(); * loader.add(MyClass.class.getClassLoader()); * loader.add(new AnotherClassLoader()); * &nbsp; * loader.loadClass("com.blah.ChickenPlucker"); * </code></pre> * * <p>The above code will attempt to load a class from the following classloaders (in order):</p> * * <ul> *   <li>AnotherClassLoader (and all its parents)</li> *   <li>The classloader for MyClas (and all its parents)</li> *   <li>The thread's context classloader (and all its parents)</li> *   <li>The classloader for XStream (and all its parents)</li> * </ul> * * @author Joe Walnes * @since 1.0.3 */public class CompositeClassLoader extends ClassLoader {    private final List classLoaders = Collections.synchronizedList(new ArrayList());    public CompositeClassLoader() {        add(Object.class.getClassLoader()); // bootstrap loader.        add(getClass().getClassLoader()); // whichever classloader loaded this jar.    }    /**     * Add a loader to the n     * @param classLoader     */    public void add(ClassLoader classLoader) {        if (classLoader != null) {            classLoaders.add(0, classLoader);        }    }    public Class loadClass(String name) throws ClassNotFoundException {        for (Iterator iterator = classLoaders.iterator(); iterator.hasNext();) {            ClassLoader classLoader = (ClassLoader) iterator.next();            try {                return classLoader.loadClass(name);            } catch (ClassNotFoundException notFound) {                // ok.. try another one            }        }        // One last try - the context class loader associated with the current thread. Often used in j2ee servers.        // Note: The contextClassLoader cannot be added to the classLoaders list up front as the thread that constructs        // XStream is potentially different to thread that uses it.        ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();        if (contextClassLoader != null) {            return contextClassLoader.loadClass(name);        } else {            throw new ClassNotFoundException(name);        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -