zoukankan      html  css  js  c++  java
  • Java自定义类加载器

    public class CustomClassLoader extends ClassLoader {
    
        @Override
        public Class findClass(String name) throws ClassNotFoundException {
            byte[] b = loadClassFromFile(name);
            return defineClass(name, b, 0, b.length);
        }
    
        private byte[] loadClassFromFile(String fileName)  {
            InputStream inputStream = getClass().getClassLoader().getResourceAsStream(
                    fileName.replace('.', File.separatorChar) + ".class");
            byte[] buffer;
            ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
            int nextValue = 0;
            try {
                while ( (nextValue = inputStream.read()) != -1 ) {
                    byteStream.write(nextValue);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            buffer = byteStream.toByteArray();
            return buffer;
        }
    
        public static void main(String[] args) {
    
            CustomClassLoader customClassLoader = new CustomClassLoader();
            try {
                Class clazz = Class.forName("com.xxx.Test1", true, customClassLoader);
                Object object = clazz.newInstance();
                Test1 test1 = (Test1) clazz.newInstance();
                test1.testMethod();
    
                Method helloMethod = clazz.getDeclaredMethod("testMethod", null);
                helloMethod.invoke(object, null);
    
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        }
    }
    public class Test1 {
    
    
        public void testMethod() {
            System.out.println("hello world");
        }
    
        public static void main(String[] args) {
    
            System.out.println("hello world");
        }
    }
    hello world
    hello world

     参考文献

    Class Loaders in Java

    https://www.baeldung.com/java-classloaders

    类加载原理分析&动态加载Jar/Dex

    https://www.jianshu.com/p/0b1dba1a1e95

  • 相关阅读:
    Restful 的概念预览
    Bootstrap中alerts的用法
    Bootstrap HTML编码规范总结
    Bootstrap中img-circle glyphicon及js引入加载更快的存放位置
    PI数据库
    memcached
    Bootstrap中样式Jumbotron,row, table的实例应用
    js事件监听
    jquery显示隐藏操作
    HDU4521+线段树+dp
  • 原文地址:https://www.cnblogs.com/parkdifferent/p/10681461.html
Copyright © 2011-2022 走看看