java - GroovyClassLoader/ClassLoader 是如何工作的?

标签 java groovy

我看到类似的代码

GroovyClassLoader cLoader = new GroovyClassLoader(this.class.getClassLoader())

后面是这样的:

cLoader.loadClass([class name])

我感兴趣的是关于 GroovyClassLoader 类以及 this.class.getClassLoader() 的用途是什么。

最佳答案

类加载器以垂直层次结构的方式工作,事实上在 java 中有三个内置的类加载器在这个层次结构中:

class loader hierarchy

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

enter image description here

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

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

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

关于java - GroovyClassLoader/ClassLoader 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30077102/

相关文章:

java - 为什么使用 BigInteger 时不需要使用 new 关键字或括号?

java - 使用 doclava 将 Logo 添加到 javadoc 的左上角

java - 如何从原始号码获取新号码?

java - Browser#getText() 返回空字符串

groovy - 可以将闭包传递给展开运算符

调用 SOAP Web 服务的 Java/Groovy 方法(版本 1.2)

spring - 如何在 Grails 电子邮件服务中获取自定义 "from address"

java - 如何在gradle java构建脚本中访问环境变量

java - Android 中的日期格式

sql - Groovy Sql 获取所有列