zoukankan      html  css  js  c++  java
  • 自定义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、结果会输出 测试类加载成功

  • 相关阅读:
    MySQL------索引
    分组数据
    聚集函数
    Web的Java开发基础分享——学生信息管理系统(二)
    Web的Java开发基础分享——学生信息管理系统(一)
    shiny酷酷的第一篇CSDN博客
    vue2.0.js
    vue1.0.js的初步学习
    layui新手使用
    前端兼容性的一些问题
  • 原文地址:https://www.cnblogs.com/fillPv/p/11175700.html
Copyright © 2011-2022 走看看