GroovyClassLoader / ClassLoader如何工作?

Ale*_*hel 4 java groovy

我看到类似的代码

GroovyClassLoader cLoader = new GroovyClassLoader(this.class.getClassLoader())
Run Code Online (Sandbox Code Playgroud)

接下来是类似的东西:

cLoader.loadClass([class name])
Run Code Online (Sandbox Code Playgroud)

我对我应该了解的GroovyClassLoader班级及其目的感兴趣this.class.getClassLoader()

dsh*_*rew 6

类加载器以垂直层次结构的方式工作,实际上,在Java中,此层次结构中内置了三个内置的类加载器:

类加载器层次结构

因此,当您将this.class.getClassLoader()传递 给构造函数时,您将创建一个类加载器,其父类是加载当前类的类加载器,这将为您提供这种类加载器层次结构。

在此处输入图片说明

为什么要以这种方式创建类加载器?为什么不获取内置的类加载器呢?那取决于你。

但是这里需要提醒的一个事实是,类加载器以自顶向下的方式加载类。一个类加载器要求它的父类加载一个类,如果父类找不到它自己加载的类(注意调用正在调用),另一个事实是类加载器有一个cache,加载的类会被缓存一段时间。

因此,我通常使用Thread.currentThread.getClassLoader()(我认为它与urs类似),因为这使我可以加载当前正在运行的线程的加载器,并且我相信它与我的其他类接近,并且希望它可能已经缓存了我所请求的类。