Java Class Load loadClass(String fqcn, Class... classes)

Here you can find the source of loadClass(String fqcn, Class... classes)

Description

Loads the class via the optionally specified classes in the order of their specification, and if not found, via the context class loader of the current thread, and if not found, from the caller class loader as the last resort.

License

Apache License

Parameter

Parameter Description
fqcn fully qualified class name of the target class to be loaded
classes class loader providers

Exception

Parameter Description
ClassNotFoundException if failed to load the class

Return

the class loaded; never null

Declaration

public static Class<?> loadClass(String fqcn, Class<?>... classes) throws ClassNotFoundException 

Method Source Code

//package com.java2s;
/*//from www . j av a  2  s  .co  m
 * Copyright 2011-2016 Amazon Technologies, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at:
 *
 *    http://aws.amazon.com/apache2.0
 *
 * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
 * OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and
 * limitations under the License.
 */

public class Main {
    /**
     * Loads the class via the optionally specified classes in the order of
     * their specification, and if not found, via the context class loader of
     * the current thread, and if not found, from the caller class loader as the
     * last resort.
     *
     * @param fqcn fully qualified class name of the target class to be loaded
     * @param classes class loader providers
     * @return the class loaded; never null
     * @throws ClassNotFoundException if failed to load the class
     */
    public static Class<?> loadClass(String fqcn, Class<?>... classes) throws ClassNotFoundException {
        return loadClass(fqcn, true, classes);
    }

    /**
     * If classesFirst is false, loads the class via the context class loader of
     * the current thread, and if not found, via the class loaders of the
     * optionally specified classes in the order of their specification, and if
     * not found, from the caller class loader as the last resort.
     * <p>
     * If classesFirst is true, loads the class via the optionally specified
     * classes in the order of their specification, and if not found, via the
     * context class loader of the current thread, and if not found, from the
     * caller class loader as the last resort.
     *
     * @param fqcn fully qualified class name of the target class to be loaded
     * @param classesFirst true if the class loaders of the optionally specified
     *            classes take precedence over the context class loader of the
     *            current thread; false if the opposite is true.
     * @param classes class loader providers
     * @return the class loaded; never null
     * @throws ClassNotFoundException if failed to load the class
     */
    public static Class<?> loadClass(String fqcn, boolean classesFirst, Class<?>... classes)
            throws ClassNotFoundException {
        Class<?> target = null;
        if (classesFirst) {
            target = loadClassViaClasses(fqcn, classes);
            if (target == null) {
                target = loadClassViaContext(fqcn);
            }
        } else {
            target = loadClassViaContext(fqcn);
            if (target == null) {
                target = loadClassViaClasses(fqcn, classes);
            }
        }
        return target == null ? Class.forName(fqcn) : target;
    }

    private static Class<?> loadClassViaClasses(String fqcn, Class<?>[] classes) {
        if (classes != null) {
            for (Class<?> c : classes) {
                ClassLoader loader = c.getClassLoader();
                if (loader != null) {
                    try {
                        return loader.loadClass(fqcn);
                    } catch (ClassNotFoundException e) {
                        // move on to try the next class loader
                    }
                }
            }
        }
        return null;
    }

    private static Class<?> loadClassViaContext(String fqcn) {
        ClassLoader loader = Thread.currentThread().getContextClassLoader();
        try {
            return loader == null ? null : loader.loadClass(fqcn);
        } catch (ClassNotFoundException e) {
        }
        return null;
    }
}

Related

  1. loadClass(String className, ClassLoader cl)
  2. loadClass(String className, ClassLoader classLoader)
  3. loadClass(String className, ClassLoader classLoader)
  4. loadClass(String className, ClassLoader classLoader)
  5. loadClass(String clazz, ClassLoader cl)
  6. loadClass(String h, String prefix)
  7. loadClass(String inClassName)
  8. loadClass(String name)
  9. loadClass(String name)