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

    隨筆檔案

    文章分類

    文章檔案

    相冊

    搜索

    •  

    最新評論

    主站蜘蛛池模板: 亚洲精品久久无码| 免费人成在线观看网站| 一级特黄录像免费播放中文版| 久青草视频97国内免费影视| 国产成人精品免费视频动漫| 亚洲A∨精品一区二区三区| 亚洲综合国产精品| 国产亚洲精品美女久久久久| 永久免费在线观看视频| 久久精品亚洲乱码伦伦中文| 亚洲日韩AV一区二区三区四区| 污污网站免费观看| 亚洲精品无码99在线观看| 亚洲日韩精品无码AV海量| 午夜神器成在线人成在线人免费| 亚洲精品私拍国产福利在线| 未满十八私人高清免费影院| 女人被免费视频网站| 18成禁人视频免费网站| 爱情岛论坛亚洲品质自拍视频网站 | 美女被免费网站视频在线| 久久免费香蕉视频| 久久99国产亚洲高清观看首页| 久久亚洲精品高潮综合色a片| 91精品国产免费久久久久久青草| 久久亚洲综合色一区二区三区| 99热这里只有精品6免费| 亚洲乱码中文字幕久久孕妇黑人| 美女被爆羞羞网站免费| 亚洲中文字幕无码日韩| 国产免费久久精品丫丫| 亚洲国产天堂在线观看| 午夜dj免费在线观看| 日本亚洲精品色婷婷在线影院| 69式互添免费视频| 噜噜综合亚洲AV中文无码| 亚洲伊人久久大香线蕉综合图片| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 永久免费视频v片www| 一级毛片**免费看试看20分钟| 亚洲高清视频在线观看|