ClassLoader util for loading classes and finding resources. : Class Loader « Language Basics « Java






ClassLoader util for loading classes and finding resources.

        

//Copyright 2007-2009 David Yu dyuproject@gmail.com
//------------------------------------------------------------------------
//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://www.apache.org/licenses/LICENSE-2.0
//Unless required by applicable law or agreed to in writing, software
//distributed under the License 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.


//package com.dyuproject.util;

import java.net.URL;

/**
 * ClassLoader util for loading classes and finding resources.
 * No checked exceptions.
 * 
 * @author David Yu
 * @created Jan 20, 2009
 */

public final class ClassLoaderUtil
{
    
    /**
     * Loads a class from the classloader; 
     * If not found, the classloader of the {@code context} class specified will be used.
     */
    public static Class<?> loadClass(String className, Class<?> context)
    {
        return loadClass(className, context, false);
    }
    
    /**
     * Loads a class from the classloader; 
     * If not found, the classloader of the {@code context} class specified will be used.
     * If the flag {@code checkParent} is true, the classloader's parent is included in 
     * the lookup.
     */
    public static Class<?> loadClass(String className, Class<?> context, boolean checkParent)
    {
        Class<?> clazz = null;
        try
        {
            clazz = Thread.currentThread().getContextClassLoader().loadClass(className);  
        }
        catch(ClassNotFoundException e)
        {
            if(context!=null)
            {
                ClassLoader loader = context.getClassLoader();
                while(loader!=null)
                {
                    try
                    {                    
                        clazz = loader.loadClass(className);
                        return clazz;
                    }
                    catch(ClassNotFoundException e1)
                    {
                        loader = checkParent ? loader.getParent() : null;
                    }
                }
            }
        }
        return clazz;
    }
    
    /**
     * Instantiates an object using its default constructor if the {@code className} is 
     * found in the classpath and loaded.
     */
    @SuppressWarnings("unchecked")
    public static <T> T newInstance(String className, Class<?> context) throws Exception
    {
        Class<T> clazz = (Class<T>)loadClass(className, context, false);
        if(clazz==null)
            throw new Exception(className + " not found in the classpath.");
        
        return clazz.newInstance();
    }
    
    /**
     * Instantiates an object using its default constructor if the {@code className} is 
     * found in the classpath and loaded.
     */
    @SuppressWarnings("unchecked")
    public static <T> T newInstance(String className, Class<?> context, boolean checkParent) 
    throws Exception
    {
        Class<T> clazz = (Class<T>)loadClass(className, context, checkParent);
        if(clazz==null)
            throw new Exception(className + " not found in the classpath.");
        
        return clazz.newInstance();
    }
    
    /**
     * Loads a {@link URL} resource from the classloader;
     * If not found, the classloader of the {@code context} class specified will be used.
     */
    public static URL getResource(String resource, Class<?> context)
    {
        return getResource(resource, context, false);
    }
    
    /**
     * Loads a {@link URL} resource from the classloader;
     * If not found, the classloader of the {@code context} class specified will be used.
     * If the flag {@code checkParent} is true, the classloader's parent is included in 
     * the lookup.
     */
    public static URL getResource(String resource, Class<?> context, boolean checkParent)
    {
        URL url = Thread.currentThread().getContextClassLoader().getResource(resource);
        if(url!=null)
            return url;
        
        if(context!=null)
        {
            ClassLoader loader = context.getClassLoader();
            while(loader!=null)
            {
                url = loader.getResource(resource);
                if(url!=null)
                    return url;
                loader = checkParent ? loader.getParent() : null;
            }
        }
        
        return ClassLoader.getSystemResource(resource);
    }


}

   
    
    
    
    
    
    
    
  








Related examples in the same category

1.Demonstration of a ClassLoaderDemonstration of a ClassLoader
2.Runs a jar application from any url
3.ClassLoader that is composed of other classloaders.
4.Various Class Loader utilities.