<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 1,  comments - 25,  trackbacks - 0
    This class is used to dynmaic add user specify location to system loader or external loader

    /*
     * $Id: ClassLoaderUtil.java, Dec 22, 2009, 8:22:21 PM, liama. Exp$
     *
     */

    import java.io.File;
    import java.io.PrintStream;
    import java.lang.reflect.Field;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLClassLoader;
    import java.util.List;

    import sun.misc.Launcher;

    /**
     * Class/Interface description
     *
     * @author liama</a>
     * @since JDK 1.5
     */
    public class ClassLoaderUtil {
        /**
         * The value is used for get parent loader.
         */
        private static Field classes;

        /**
         * The add url method loader.
         */
        private static Method addURL;
        static {
            try {
                 classes = ClassLoader.class.getDeclaredField("parent");
                 addURL = URLClassLoader.class.getDeclaredMethod("addURL",new Class[] { URL.class });
             } catch (Exception e) {
                 e.printStackTrace();
             }
             classes.setAccessible(true);
             addURL.setAccessible(true);
         }

        /**
         * The value is used for system loader
         */
        private static URLClassLoader system = (URLClassLoader) getSystemClassLoader();

        /**
         * The value is used for external loader
         */
        private static URLClassLoader ext = (URLClassLoader) getExtClassLoader();

        /**
         * Get system loader
         *
         * @return {@link ClassLoader}
         */
        public static ClassLoader getSystemClassLoader() {
            return ClassLoader.getSystemClassLoader();
         }

        /**
         * Get external loader
         *
         * @return {@link ClassLoader}
         */
        public static ClassLoader getExtClassLoader() {
            return getSystemClassLoader().getParent();
         }

        /**
         * Get sub class loader from system class loader
         *
         * @return {@link List}
         */
        public static List getClassesLoadedBySystemClassLoader() {
            return getClassesLoadedByClassLoader(getSystemClassLoader());
         }

        /**
         * Get sub class loader from external class loader
         *
         * @return {@link List}
         */
        public static List getClassesLoadedByExtClassLoader() {
            return getClassesLoadedByClassLoader(getExtClassLoader());
         }

        /**
         * Get sub class loader from  class loader
         *
         * @param cl {@link ClassLoader}
         * @return {@link List}
         */
        public static List getClassesLoadedByClassLoader(ClassLoader cl) {
            try {
                return (List) classes.get(cl);
             } catch (Exception e) {
                //throw new RootException(e);
                 e.printStackTrace();
                return null;
            }
         }

        /**
         * Get bootstrap urls
         *
         * @return {@link URL}
         */
        public static URL[] getBootstrapURLs() {
            return Launcher.getBootstrapClassPath().getURLs();
         }

        /**
         * Get system urls
         *
         * @return {@link URL}
         */
        public static URL[] getSystemURLs() {
            return system.getURLs();
         }

        /**
         * Get external urls
         *
         * @return {@link URL}
         */
        public static URL[] getExtURLs() {
            return ext.getURLs();
         }

        /**
         * Print class path to specify stream
         *
         * @param ps {@link PrintStream}
         * @param classPath {@link URL}
         */
        private static void list(PrintStream ps, URL[] classPath) {
            for (int i = 0; i < classPath.length; i++) {
                 ps.println(classPath[i]);
             }
         }

        /**
         * List boot strap class path
         */
        public static void listBootstrapClassPath() {
             listBootstrapClassPath(System.out);
         }

        /**
         * Print boot strap class path
         *
         * @param ps {@link PrintStream}
         */
        public static void listBootstrapClassPath(PrintStream ps) {
             ps.println("BootstrapClassPath:");
             list(ps, getBootstrapClassPath());
         }

        /**
         * list system class path
         */
        public static void listSystemClassPath() {
             listSystemClassPath(System.out);
         }

        /**
         * Print system class path
         *
         * @param ps {@link PrintStream}
         */
        public static void listSystemClassPath(PrintStream ps) {
             ps.println("SystemClassPath:");
             list(ps, getSystemClassPath());
         }

        /**
         * List external class path
         */
        public static void listExtClassPath() {
             listExtClassPath(System.out);
         }

        /**
         * Print external class path
         *
         * @param ps {@link PrintStream}
         */
        public static void listExtClassPath(PrintStream ps) {
             ps.println("ExtClassPath:");
             list(ps, getExtClassPath());
         }

        /**
         * Get boot strap class path
         *
         * @return {@link URL}
         */
        public static URL[] getBootstrapClassPath() {
            return getBootstrapURLs();
         }

        /**
         * Get system class path
         *
         * @return {@link URL}
         */
        public static URL[] getSystemClassPath() {
            return getSystemURLs();
         }

        /**
         * Get external class path
         *
         * @return {@link URL}
         */
        public static URL[] getExtClassPath() {
            return getExtURLs();
         }

        /**
         * Add user specify URL to system class loader
         *
         * @param url {@link URL}
         */
        public static void addURL2SystemClassLoader(URL url) {
            try {
                 addURL.invoke(system, new Object[] { url });
             } catch (Exception e) {
                 e.printStackTrace();
             }
         }

        /**
         * Add user specify URL to external class loader
         *
         * @param url {@link URL}
         */
        public static void addURL2ExtClassLoader(URL url) {
            try {
                 addURL.invoke(ext, new Object[] { url });
             } catch (Exception e) {
                 e.printStackTrace();
             }
         }

        /**
         * Add user specify String to class loader
         *
         * @param path {@link String}
         */
        public static void addClassPath(String path) {
             addClassPath(new File(path));
         }

        /**
         * Add user specify String to external class loader
         *
         * @param path {@link String}
         */
        public static void addExtClassPath(String path) {
             addExtClassPath(new File(path));
         }

        /**
         * Add user specify File to  class loader
         *
         * @param dirOrJar {@link File}
         */
        public static void addClassPath(File dirOrJar) {
            try {
                 addURL2SystemClassLoader(dirOrJar.toURL());
             } catch (MalformedURLException e) {
                //throw new RootException(e);
                 e.printStackTrace();
             }
         }

        /**
         * Add user specify File to external class loader
         *
         * @param dirOrJar {@link File}
         */
        public static void addExtClassPath(File dirOrJar) {
            try {
                 addURL2ExtClassLoader(dirOrJar.toURL());
             } catch (MalformedURLException e) {
                 e.printStackTrace();
             }
         }
       
        /**
         * Add specify path to specify loader
         *
         * @param cl {@link ClassLoader}
         * @param path String
         */
        public static void addClassPath2ClassLoader(ClassLoader cl, String path){
            try {
                addURL.invoke(cl, new File(path).toURL());
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        }
       
        /**
         * Add specify path to specify loader
         *
         * @param cl {@link ClassLoader}
         * @param path String
         */
        public static void addClassPath2ClassLoader(ClassLoader cl, URL path){
            try {
                addURL.invoke(cl, path);
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        }
    }

    posted on 2009-12-24 21:04 Daniel 閱讀(605) 評論(0)  編輯  收藏 所屬分類: CoreJava
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(3)

    隨筆檔案

    文章分類

    文章檔案

    相冊

    搜索

    •  

    最新評論

    主站蜘蛛池模板: 毛片A级毛片免费播放| 中文字幕在线视频免费观看| 青青草a免费线观a| 亚洲色欲色欲www| 午夜性色一区二区三区免费不卡视频| 久久精品国产亚洲| 久久永久免费人妻精品下载 | 日韩插啊免费视频在线观看| 亚洲国产精品嫩草影院在线观看 | 亚洲免费在线视频| 亚洲精品美女久久久久9999| 国产黄色免费网站| 亚洲自偷自偷在线成人网站传媒| 成人av免费电影| 美女啪啪网站又黄又免费| 亚洲一级片免费看| 免费av片在线观看网站| 亚洲欧洲日本国产| 欧洲精品免费一区二区三区| 欧洲美女大片免费播放器视频| 亚洲综合精品香蕉久久网| 三年片在线观看免费观看大全动漫 | 国产精品美女久久久免费| 亚洲国产精品SSS在线观看AV| 免费观看激色视频网站bd| 亚洲AV噜噜一区二区三区| 中文字幕第13亚洲另类| 久久久久av无码免费网| 精品亚洲成A人在线观看青青| 亚洲熟妇中文字幕五十中出| 亚洲成人免费网址| 污视频网站免费在线观看| 久久精品国产亚洲AV果冻传媒| 久久精品免费一区二区喷潮| 免费精品久久久久久中文字幕| 亚洲国产日韩一区高清在线| 美女被免费视频网站a国产| 色播在线永久免费视频网站| 亚洲 日韩 色 图网站| 亚洲一级片内射网站在线观看| 国产一卡二卡3卡四卡免费|