首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GroovyClassLoader/ClassLoader是如何工作的?

GroovyClassLoader/ClassLoader是如何工作的?
EN

Stack Overflow用户
提问于 2015-05-06 12:43:06
回答 3查看 8.2K关注 0票数 4

我看到代码就像

代码语言:javascript
复制
GroovyClassLoader cLoader = new GroovyClassLoader(this.class.getClassLoader())

其次是类似于:

代码语言:javascript
复制
cLoader.loadClass([class name])

我感兴趣的是我应该了解GroovyClassLoader类的内容以及this.class.getClassLoader()的用途。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-07 08:06:27

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

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

为什么要用这种方式创建类加载程序?为什么不使用内置的类加载程序呢?这取决于你。

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

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

票数 8
EN

Stack Overflow用户

发布于 2015-05-07 08:31:03

Groovy是一种脚本语言,因此,您将发现自己在许多地方从文件中加载Groovy脚本并希望执行它。这里有两个问题:

  • Groovy代码需要一个合适的环境。
  • 您最终希望摆脱脚本(以及它的所有类)。

GroovyClassLoader将确保脚本(当它处于活动状态时加载)将工作。当它被垃圾收集时,它将确保所有的资源都可以是GC的(否则,如果磁盘上的脚本改变了,并且您想重新加载它,或者您会耗尽内存等等,您最终会遇到问题)。

Groovy代码需要访问普通的Java类,这就是为什么您必须给它一个父类加载器。Groovy类加载器将向父类请求任何它自己不知道的内容。

票数 3
EN

Stack Overflow用户

发布于 2015-05-06 14:43:39

根据文档,然后将传递给构造函数的this.class.ClassLoader()参数作为创建的GroovyClassLoader的父级(而不是使用当前线程的上下文类加载器作为父-默认行为)。

我不是类加载方面的专家,但是类加载器的父类AFAIK首先被调用来搜索给定的类。

至于它应该知道些什么,我不能告诉你更多的东西在文档中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30077102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档