我看到代码就像
GroovyClassLoader cLoader = new GroovyClassLoader(this.class.getClassLoader())其次是类似于:
cLoader.loadClass([class name])我感兴趣的是我应该了解GroovyClassLoader类的内容以及this.class.getClassLoader()的用途。
发布于 2015-05-07 08:06:27
类加载器以垂直层次结构的方式工作,实际上,在java中,在这个层次结构中有三个内置的类加载器:

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

为什么要用这种方式创建类加载程序?为什么不使用内置的类加载程序呢?这取决于你。
但是这里要提醒的一个事实是,类加载器以自顶向下的方式加载类。类加载器要求它的父类加载一个类,如果父类找不到它自己加载的类(注意调用正在重新发生),而另一个事实是类加载器有一个缓存,加载的类被缓存一段时间。
所以我通常使用Thread.currentThread.getClassLoader() (我认为它类似于urs),因为这给了我加载当前正在运行的线程的加载程序,并且我相信它接近我的其他类,并且希望它能够缓存我请求的类。
发布于 2015-05-07 08:31:03
Groovy是一种脚本语言,因此,您将发现自己在许多地方从文件中加载Groovy脚本并希望执行它。这里有两个问题:
GroovyClassLoader将确保脚本(当它处于活动状态时加载)将工作。当它被垃圾收集时,它将确保所有的资源都可以是GC的(否则,如果磁盘上的脚本改变了,并且您想重新加载它,或者您会耗尽内存等等,您最终会遇到问题)。
Groovy代码需要访问普通的Java类,这就是为什么您必须给它一个父类加载器。Groovy类加载器将向父类请求任何它自己不知道的内容。
发布于 2015-05-06 14:43:39
根据文档,然后将传递给构造函数的this.class.ClassLoader()参数作为创建的GroovyClassLoader的父级(而不是使用当前线程的上下文类加载器作为父-默认行为)。
我不是类加载方面的专家,但是类加载器的父类AFAIK首先被调用来搜索给定的类。
至于它应该知道些什么,我不能告诉你更多的东西在文档中。
https://stackoverflow.com/questions/30077102
复制相似问题