<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)

    隨筆檔案

    文章分類

    文章檔案

    相冊

    搜索

    •  

    最新評論

    主站蜘蛛池模板: 亚洲AV无码专区亚洲AV伊甸园| 九九免费精品视频在这里| 亚洲成AV人片一区二区密柚| 嫩草影院免费观看| 59pao成国产成视频永久免费| 亚洲综合在线另类色区奇米| 天天摸天天操免费播放小视频 | 免费无码又爽又刺激毛片| 男人进去女人爽免费视频国产| 亚洲最新在线视频| 亚洲乱色熟女一区二区三区丝袜| 37pao成人国产永久免费视频| 中国一级特黄的片子免费 | 国产一区二区三区在线免费 | 老司机午夜精品视频在线观看免费 | 亚洲精品蜜桃久久久久久| 99爱免费观看视频在线| 亚洲人成色777777精品| 亚洲a∨无码男人的天堂| 亚洲无圣光一区二区| 亚洲福利一区二区精品秒拍| 国产免费怕怕免费视频观看| 性感美女视频在线观看免费精品| aa级一级天堂片免费观看| aⅴ在线免费观看| 97碰公开在线观看免费视频| 日本免费网站视频www区| 中文字幕亚洲免费无线观看日本| 久久99国产乱子伦精品免费| 88av免费观看| 亚洲一区二区免费视频| 日韩欧毛片免费视频| 丁香花在线观看免费观看图片| 国产日韩久久免费影院| 四虎国产精品免费永久在线| 亚洲成av人片在线天堂无| 朝桐光亚洲专区在线中文字幕| 亚洲妇女水蜜桃av网网站| 亚洲av日韩av综合| 亚洲AV综合色区无码一二三区| 国产精品亚洲一区二区三区久久 |