zoukankan      html  css  js  c++  java
  • 类加载处理

    package com.atom.util;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URL;
    
    /**
     * <p>
     * <a href="ClassLoaderUtils.java.html"><i>View Source</i></a>
     * </p>
     *
     * @author KHT
     * @version $Id: ClassLoaderUtils.java 9326 2008-10-07 03:44:39Z bai $
     */
    public class ClassLoaderUtils {
    
        /**
         * Load a given resource.
         * <p/>
         * This method will try to load the resource using the following methods (in order):
         * <ul>
         * <li>From {@link Thread#getContextClassLoader() Thread.currentThread().getContextClassLoader()}
         * <li>From {@link Class#getClassLoader() ClassLoaderUtil.class.getClassLoader()}
         * <li>From the {@link Class#getClassLoader() callingClass.getClassLoader() }
         * </ul>
         *
         * @param resourceName The name of the resource to load
         * @param callingClass The Class object of the calling object
         */
        @SuppressWarnings("unchecked")
    	public static URL getResource(String resourceName, Class callingClass) {
            URL url = null;
    
            url = Thread.currentThread().getContextClassLoader().getResource(resourceName);
    
            if (url == null) {
                url = ClassLoaderUtils.class.getClassLoader().getResource(resourceName);
            }
    
            if (url == null) {
                url = callingClass.getClassLoader().getResource(resourceName);
            }
    
            return url;
        }
    
        /**
         * This is a convenience method to load a resource as a stream.
         * <p/>
         * The algorithm used to find the resource is given in getResource()
         *
         * @param resourceName The name of the resource to load
         * @param callingClass The Class object of the calling object
         */
        @SuppressWarnings("unchecked")
    	public static InputStream getResourceAsStream(String resourceName, Class callingClass) {
            URL url = getResource(resourceName, callingClass);
    
            try {
                return (url != null) ? url.openStream() : null;
            } catch (IOException e) {
                return null;
            }
        }
    
        /**
         * Load a class with a given name.
         * <p/>
         * It will try to load the class in the following order:
         * <ul>
         * <li>From {@link Thread#getContextClassLoader() Thread.currentThread().getContextClassLoader()}
         * <li>Using the basic {@link Class#forName(java.lang.String) }
         * <li>From {@link Class#getClassLoader() ClassLoaderUtil.class.getClassLoader()}
         * <li>From the {@link Class#getClassLoader() callingClass.getClassLoader() }
         * </ul>
         *
         * @param className    The name of the class to load
         * @param callingClass The Class object of the calling object
         * @throws ClassNotFoundException If the class cannot be found anywhere.
         */
        @SuppressWarnings("unchecked")
    	public static Class loadClass(String className, Class callingClass) throws ClassNotFoundException {
            try {
                return Thread.currentThread().getContextClassLoader().loadClass(className);
            } catch (ClassNotFoundException e) {
                try {
                    return Class.forName(className);
                } catch (ClassNotFoundException ex) {
                    try {
                        return ClassLoaderUtils.class.getClassLoader().loadClass(className);
                    } catch (ClassNotFoundException exc) {
                        return callingClass.getClassLoader().loadClass(className);
                    }
                }
            }
        }
    
        /**
         * Prints the current classloader hierarchy - useful for debugging.
         */
        public static void printClassLoader() {
            System.out.println("ClassLoaderUtils.printClassLoader");
            printClassLoader(Thread.currentThread().getContextClassLoader());
        }
    
        /**
         * Prints the classloader hierarchy from a given classloader - useful for debugging.
         */
        public static void printClassLoader(ClassLoader cl) {
            System.out.println("ClassLoaderUtils.printClassLoader(cl = " + cl + ")");
    
            if (cl != null) {
                printClassLoader(cl.getParent());
            }
        }
    }
     
  • 相关阅读:
    Oauth2.0认证原理
    互联网开放平台API安全设计
    API接口幂等性框架设计
    防盗链&CSRF&API接口幂等性设计
    ElasticSearch高可用集群环境搭建和分片原理
    SpringBoot2.0+ElasticSearch网盘搜索实现
    Elasticsearch6.4.3文档的映射
    中文分词器
    C# 插件
    JavaScript 网址
  • 原文地址:https://www.cnblogs.com/qq1988627/p/6606930.html
Copyright © 2011-2022 走看看