自定义Cass loader

Posted fillpv

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义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、结果会输出 测试类加载成功

 

以上是关于自定义Cass loader的主要内容,如果未能解决你的问题,请参考以下文章

自己用过的CASS技巧

webpack loader自定义编写

webpack loader自定义编写

自定义loader基础知识

webpack配置之自定义loader

自定义 MY_Loader 加载一组视图 [重复]