Java tutorial
/** * EasyBeans * Copyright (C) 2006 Bull S.A.S. * Contact: easybeans@ow2.org * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * * -------------------------------------------------------------------------- * $Id: ClassUtils.java 3783 2008-07-30 13:44:06Z benoitf $ * -------------------------------------------------------------------------- */ /** * The <code>ClassUtils</code> class is the central point used to load classes. * @author Guillaume Sauthier */ public final class ClassUtils { /** * Default constructor. */ private ClassUtils() { } /** * Look up the class in the Tread Context ClassLoader and in the "current" ClassLoader. * @param className The class name to load * @return the corresponding Class instance * @throws ClassNotFoundException if the Class was not found. */ public static Class forName(final String className) throws ClassNotFoundException { // Load classes from different classloaders : // 1. Thread Context ClassLoader // 2. ClassUtils ClassLoader ClassLoader tccl = Thread.currentThread().getContextClassLoader(); Class cls = null; try { // Try with TCCL cls = Class.forName(className, true, tccl); } catch (ClassNotFoundException cnfe) { // Try now with the classloader used to load ClassUtils ClassLoader current = ClassUtils.class.getClassLoader(); try { cls = Class.forName(className, true, current); } catch (ClassNotFoundException cnfe2) { // If this is still unknown, throw an Exception throw cnfe2; } } return cls; } /** * Look up the class in the Tread Context ClassLoader and in the "current" ClassLoader. * @param className The class name to load * @param clazz a class used to get classloader * @return the corresponding Class instance * @throws ClassNotFoundException if the Class was not found. */ public static Class forName(final String className, final Class clazz) throws ClassNotFoundException { // Load classes from different classloaders : // 1. Thread Context ClassLoader // 2. ClassUtils ClassLoader ClassLoader tccl = Thread.currentThread().getContextClassLoader(); Class cls = null; try { // Try with TCCL cls = Class.forName(className, true, tccl); } catch (ClassNotFoundException cnfe) { // Try now with the classloader used to load ClassUtils ClassLoader current = clazz.getClassLoader(); if (current != null) { try { cls = Class.forName(className, true, current); } catch (ClassNotFoundException cnfe2) { // If this is still unknown, throw an Exception throw new ClassNotFoundException("Class Not found in current ThreadClassLoader '" + tccl + "' and in '" + current + "' classloaders.", cnfe2); } } else { // rethrow exception throw cnfe; } } return cls; } }