本文的Flink源码版本为: 1.15-SNAPSHOT,读者可自行从Github clone.
要讲解 Flink 的类加载机制,首先你得对 JDK 的类加载机制有所了解。
推荐阅读我之前写的1篇博客: 基于源码深入了解Java的类加载机制(JDK8和JDK11双版本)
接着看一下 FLink 的类加载器继承结构:
FlinkUserCodeClassLoader 继承自 URLClassLoader 类,其 loadClass() 方法实现如下:
@Override
public final Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
try {
synchronized (getClassLoadingLock(name)) {
return loadClassWithoutExceptionHandling(name, resolve);
}
} catch (Throwable classLoadingException) {
classLoadingExceptionHandler.accept(classLoadingException);