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

  • 相关阅读:
    Yii常用路径说明
    PHP-redis中文文档
    PHP 判断客户端是IOS还是Android
    yiii 框架登录 判断是否是游客模式及未登录状态
    php实现数字格式化,数字每三位加逗号的功能函数
    php array_udiff_uassoc比较数组的键值与值
    php--数组函数array
    安装Postman
    vue指令
    vue 错误记录
  • 原文地址:https://www.cnblogs.com/parkdifferent/p/10681461.html
Copyright © 2011-2022 走看看