• 自定义Cass loader


    1、先建一个被加载的测试类

    public class Person {
    
        private Integer age;
    
        public Integer getAge() {
            return age;
        }
    
        @Override
        public String toString() {
            return "测试类加载成功";
        }
    }
    

      

    2、建一个自定义的类加载器

    继承ClassLoader类,重写findClass,这样不破坏Java的双亲委派机制。

        public class PathClassLoader extends ClassLoader{
            private String classPath;
    
            public PathClassLoader(){
    
            }
    
            public void setClassPath(String classPath) {
                this.classPath = classPath;
            }
    
            @Override
            protected Class<?> findClass(String className) throws ClassNotFoundException {
                byte[] classData = getClassByte(className);
                if(classData == null){
                    throw new ClassNotFoundException();
                }
                return defineClass(className,classData,0,classData.length);
            }
    
            public byte[] getClassByte(String className) {
                String path = classPath + File.separator+ className.replace(".",File.separator) + ".class";
                InputStream inputStream = null;
                try {
                    inputStream = new FileInputStream(path);
                    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                    byte[] buffer = new byte[1024];
                    int length = 0;
                    while ((length=inputStream.read(buffer)) != -1){
                        byteArrayOutputStream.write(buffer,0 ,length);
                    }
                    return byteArrayOutputStream.toByteArray();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return null;
            }
        }
    

      

    3、测试类

        public static void main(String[] args) throws Exception {
            String classPath = "D:\workspace\idea\fmdes\target\classes";
            PathClassLoader classLoader = new PathClassLoader();
            classLoader.setClassPath(classPath);
            String className = "com.fmys.api.test.Person";
            Class loadClass = classLoader.loadClass(className);
            System.out.println(loadClass.newInstance());
    
        }
    

      

    4、结果会输出 测试类加载成功

  • 相关阅读:
    由于服务主机:DCOM服务进程占用过多CPU,导致系统卡死
    MySQL优化
    input type="file"文件上传到后台读取
    mysql 创建事件
    Quartz.Net实现的定时执行任务调度
    js 编码详解
    C# DateTime.Now 详解
    C# 读写text 详细讲解
    百度地图API详细介绍
    layui table 详细讲解
  • 原文地址:https://www.cnblogs.com/fillPv/p/11175700.html
Copyright © 2020-2023  润新知