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

  • 相关阅读:
    shiro什么时候会进入doGetAuthorizationInfo(PrincipalCollection principals)
    Kali2安装完成后的设置
    Springboot打包war
    2017总结及2018计划
    gitlab数据库
    Entity Framework学习
    从零开始编写操作系统——bochs
    Docker基本操作
    Jenkins打包安卓时提示没同意constraintLayout的license的解决方法
    env:bash 解决
  • 原文地址:https://www.cnblogs.com/fillPv/p/11175700.html
Copyright © 2011-2022 走看看