首先 调用 FileSystem.get() 的时候会进入到FileSystem类中进行对象的获取,其中 通过 loadFileSystems() 这个方法不难发现使用了ServiceLoader 进行数据的加载ServiceLoader<FileSystem> serviceLoader = ServiceLoader.load(FileSystem.class);
在遍历的时候
while (it.hasNext()) {
FileSystem fs = null;
try {
fs = it.next();
try {
SERVICE_FILE_SYSTEMS.put(fs.getScheme(), fs.getClass());
} catch (Exception e) {
LOG.warn("Cannot load: " + fs + " from " +
ClassUtil.findContainingJar(fs.getClass()), e);
}
} catch (ServiceConfigurationError ee) {
LOG.warn("Cannot load filesystem", ee);
}
}
加载了一个叫做 DistributedFileSystem 的子类
在这个子类中找到static静态块
观察 HdfsConfiguration 类
找到了,又是一个开开心心的一天