问题标签 [dynamic-class-loaders]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
6703 浏览

java - Java 类加载器

谁能给我一个好的资源或解释一下类加载器背后的概念?我在类加载器http://www.onjava.com/lpt/a/5586上找到了以下资源,但仍然没有帮助。以下问题可能看起来很愚蠢,但试图回答它们总是让我感到困惑。

  • 为什么开发人员要编写自定义类加载器,为什么不调用 Bootstrap 类加载器来调用您的自定义类?定义自定义类加载器需要什么?

  • 为什么有这么多种类加载器?例如:Bootsrap、Comman、Catalina 类加载器等,

    提前致谢。

0 投票
6 回答
1091 浏览

java - Java:强大的代码移动性如何?

有谁知道如何使用 Java 实现强大的代码移动性?你以前做过吗?

这是我试图实现的目标。

假设我们有 2 个独立的 Java 应用程序通过网络进行通信。应用 A 和应用 B。

应用 A 有一个类 x 实例化为一个对象,并且一直在使用它。应用 B 没有此类 x 的先验知识。

App A 需要将 class x 的实例迁移到 App B。 App B 应该能够动态加载 class x,并保留 class x 的状态

我用谷歌搜索了很多关于如何在运行时动态加载类的资源。但是,我不确定是否涵盖了通过网络传输对象实例及其状态以及动态调用它的机制。

任何指示都会非常有帮助,并提前感谢您!

注意:我最感兴趣的是如何(即方法,思考方式)这个问题是如何解决的,而不是用来解决这个问题的;这是因为我的任务是想出我自己的解决方案来解决这个问题。尽管指出库/框架很棒,但如果答案是从以前做过类似事情的人那里发布的(尽管很少见),那将是理想的。

0 投票
5 回答
20375 浏览

python - Python 2.6 中的动态类加载:RuntimeWarning:处理绝对导入时未找到父模块“插件”

我正在开发一个插件系统,插件模块的加载方式如下:

该代码有效,但对于插件代码中的每个导入语句,我都会收到如下警告:

主程序代码没有报错,插件正常工作。

有人可以解释警告的含义以及我做错了什么。我是否需要单独创建一个空插件模块并导入它以保持 python 快乐?

0 投票
3 回答
9039 浏览

java - 在java中动态加载一个具有不同包名的类

是否可以在 Java 中加载一个类并“伪造”一个类的包名/规范名?我尝试这样做,这是显而易见的方式,但我在ClassDefNotFoundException.

我这样做的原因是我试图加载一个在默认包中编写的 API,以便我可以直接使用它而不使用反射。代码将针对代表包和包名导入的文件夹结构中的类进行编译。IE:

我目前的代码如下:

0 投票
4 回答
151 浏览

programming-languages - 哪些框架(和相关语言)支持类替换?

我正在写我的硕士论文,其中涉及 .NET 中的 AOP 等,我提到在加载时不支持替换类是目前没有 .NET AOP 框架的一个重要因素。执行真正的动态编织——并非没有强加编织类必须在接口上扩展ContextBoundObjectMarshalByRefObject公开其所有语义的要求。

但是,您可以在 JVM 中使用 Java 执行此操作,这要归功于ClassFileTransformer

  • 你扩展ClassFileTransformer.
  • 您订阅了类加载事件。
  • 在类加载时,您重写类并替换它。

这一切都很好,但是我的项目主管在最后一刻要求我给他一份框架(和相关语言)的列表,这些框架(和相关语言)支持/不支持类替换。我现在真的没有时间去寻找这个:仅仅做一个肤浅的研究并可能在我的论文中加入错误的信息,我会感到不舒服。

所以我问你,哦,万能的编程社区,你能帮忙吗?当然,我不是要你自己研究这个。简单地说,如果您确定某个特定框架支持/不支持此功能,请将其作为答案。如果您不确定,请不要忘记指出。

非常感谢!


编辑:@ewernli

  • 我在问(2)。
  • 在 C# 中,您确实可以在运行时发出代码并动态创建新类,但它们是类,它们不会替换现有类。我想做的是在加载时转换类,就像你可以在 Java 中使用ClassFileTransformer.
  • 关于修改方法的签名:是的,你是对的。我应该提到,就我而言,我不想修改类的接口,而是修改其方法的内容。

你的回答真的很有帮助。谢谢 :)

0 投票
1 回答
659 浏览

java - Beanshell 不会加载我动态添加的 JDBC Driver 类?

使用 JDK1.6.0_16,我有一个简单的程序,我试图让 beanshell 2.0b4 动态加载 .jar(正如文档所暗示的那样),但我没有运气。文档说,如果我使用 beanshells 的 getClass() 方法,那么它将加载以前由“addClassPath()”方法加载的 jar。它不工作。我需要这方面的帮助...

我遇到的这个问题强烈表明(beanshell 的)getClass() 方法无法看到它自己动态更改的类路径。

注意:此代码仅在我将 mysql.jar 文件放入 jre/lib/ext 目录时才有效(这是旧版 jre 类加载器可以加载它的位置;不是 beanshell 类加载器)

0 投票
1 回答
165 浏览

classloader - 无法从目录加载类。with jars while 可以在 jars 解压/解压时加载类

社区!如果你能帮助我解决我的问题,那就太好了。

我有一个自定义类加载器,它将成为java.system.class.loader- 它包含在哪里可以找到类的 URL。像这样:

然后我使用 -Djava.system.class.loader=TestSystemClassLoader eg.TestMain 运行 java(JDK6),其中 eg.TestMain' 主要:

让我生气的是,如果我解压/解压/解压 junit-4.8.2.jar - 那么 eg.TestMain 就可以了!

问题是 - 如何告诉 java(JDK6) 我希望整个目录位于类路径中,即位于目录中的任何文件。

提前致谢!

0 投票
1 回答
1520 浏览

java - Beanshell 不允许我将 jar 添加到“默认”JRE 类加载器?

我有一个关于Beanshell的问题,我在任何地方都找不到答案。我只能以 2 种方式中的 1 种方式运行 Beanshell 脚本:

  1. 其中 Classpath 在调用 Beanshell 之前定义,而 Beanshell 使用 JRE 默认类加载器。

  2. 在启动 Beanshell 之前根本没有定义类路径,然后我使用 addClassPath()andimportCommands()在 Beanshell 的类加载器中动态构建类路径。此方法似乎没有继承作为默认 JRE 类加载器一部分的 jar。

经过大量实验,我了解到我无法使用预定义的 Classpath 启动脚本,然后能够使用addClassPath(). 我不知道这是按设计的还是我做错了什么?

自己很容易看出我的问题是什么。例如,这里是脚本:

第二次调用导致此错误:

Test.bat 启动这个 Beanshell 脚本:

而且,这是我的 helloWorld.bsh 脚本:

0 投票
2 回答
625 浏览

java - Java:在子包中执行任意类的方法

考虑这个包结构

  1. 我想以这样的方式编写主类,如果我给出这样的命令
    $ java java.assignments.Main exe java.assignments.lab2.Exe2,程序应该执行存储在lab2.Exe2.java

  2. 如果我给$ java java.assignments.Main src java.assignments.lab2.Exe2程序应该打印Exe2.java的源代码

    如果显示的源代码包含我在程序中编写的注释,我会更喜欢。

  3. 如果我给$ java java.assignments.Main list它应该列出所有包和包含的类java.assignments

    如果我给$ java java.assignments.Main list java.assignements.lab3 它应该列出包含在java.assignments.lab3

这些事情可能吗?如果是的话,我该如何实现这一点。

到目前为止我发现的东西,

我发现我可以execute classes #1#本教程中动态加载和,但是我如何实现#2# displaying Source codelisting packages #3#

0 投票
2 回答
2190 浏览

java - 自定义类加载/覆盖 Android 原生类

主要目标是用我自己的实现覆盖 Android 系统类(活动、视图等)。

http://android-developers.blogspot.com/2011/07/custom-class-loading-in-dalvik.html

ClassLoader 用于实现自定义类加载,加载非系统类(custom class)的工作。

但是当我尝试用我的实现加载 Activity 时 - 它没有加载,因为 ClassLoader 已经在它的缓存中有这个类:

如何更改类加载器以注入我自己的类而不是系统?