data: 202101272105 source: Java Class loader 类加载器详细介绍
自定义类加载器
java.lang.ClassLoader 中有三个重要的方法:
loadClass()findClass()defineClass()
loadClass() 方法是加载目标类。
- 首先查找当前 ClassLoader 以及它的双亲里面是否已经加载目标类
- 如果自己和双亲都加载不了,调用
findClass()让自定义加载器加载目标类 - 子类需要实现
findClass()方法实现不同的逻辑来获取目标类字节码 - 拿到字节码后调用
defineClass()方法将字节码转换成 Class 对象
自定义类加载器不要轻易覆盖 loadClass() 方法,否则可能导致自定义类加载器无法加载内置类库。
自定义类加载器的核心在于对字节码文件的获取,如果是加密的字节码则需要在自定义类加载器中对内容解密。
- 传递的文件名需要是类的全限定名
- 不要重写 loadClass 方法,容易破坏双亲委派模式