【jvm】用户自定义类加载器
企业开发
2023-09-30 07:13:36
阅读次数: 0
一、说明
- 1.java日常应用开发中,类的加载几乎是引导类加载器、系统类加载器和扩展类加载器3种类加载器相互配合执行的
- 2.必要时,用户是可以自定义类加载器,来定制类的加载方式
二、优点
- 1.隔离加载类
- 2.修改类加载方式
- 3.扩展加载源
- 4.防止源码泄露
三、实现步骤
- 1.开发人员通过继承抽象类 java.lang.ClassLoader类的方式,实现自己的类加载器
- 2.在jdk1.2之前,在自定义类加载器时,总会继承ClassLoader类并重写loadClass()方法,从而实现自定义的类加载类
- 3.在jdk1.2之后,不建议用户去覆盖loadClass方法,建议把自定义的类加载逻辑写在findClass()方法中
- 4.在编写自定义类加载器时,如果没有太过于复杂的需求,可以直接继承URLClassLoader类,可以避免自己去编写findClass方法及其获取字节码流的方式,使自定义类加载器编写更加简洁
四、ClassLoader
- 1.是一个抽象类,后面所有的类加载器都继承自ClassLoader(不包括启动类加载器)
- 2.启动类加载器是c++语言编写的,无法继承
- 3.getParent():返回该类加载器的超类加载器
- 4.loadClass(String name):加载名称为name的类,返回结果为java.lang.Class类的实例
- 5.findClass(String name):查找名称为name的类,返回结果为java.lang.Class类的实例
- 6.findLoadedClass(String name):查找名称为name的已经被加载过的类,返回结果为java.lang.Class类的实例
- 7.defineClass(String name, byte[] b, int off, int len):把字节数组b中的内容转换为一个java类,返回结果为java.lang.Class类的实例
- 8.resolveClass(Class<?> c):连接指定的一个java类
五、获取ClassLoader的途径
- 1.获取当前类的ClassLoader:clazz.getClassLoader()
- 2.获取当前线程上下文的ClassLoader:Thread.currentThread().getContextClassLoader()
- 3.获取系统的ClassLoader:ClassLoader.getSystemClassLoader()
- 4.获取调用者的ClassLoader:DriverManager.getCallerClassLoader()
转载自blog.csdn.net/qq_32088869/article/details/132351443