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、结果会输出 测试类加载成功

  • 相关阅读:
    C++/CLI中的资源清理(Destructor,Finalizer
    c++/cli 之数据库操作
    利用139,189,yahoo等邮箱短信提示来免费发短信提示
    小例子复习下委托的应用
    c++/cli 之日志记录
    c++/cli 之异步Socket完成端口实例
    C++/CLI, Finalize and Dispose
    C/C++的位运算符操作
    实现自定义控件与背景图完全重叠
    RichTextBox与NotifyIcon简单模仿QQ效果
  • 原文地址:https://www.cnblogs.com/fillPv/p/11175700.html
Copyright © 2011-2022 走看看