问题标签 [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 投票
2 回答
343 浏览

java - 如何在 Java 中实现对象代理或类代理?

我需要在我的项目中扩展一个 .class 文件,并且需要覆盖一个简单的方法。考虑我有一些.jar包中的A类。现在我想覆盖AI类的test()方法,使用创建A的子类B并覆盖它。现在在我的应用程序包(它是 .jar)中为 A 类创建对象。该对象调用 A 类的方法。但我想调用 B 类方法。

我的想法是在整个应用程序中代理对象创建。每当创建 A 类的 obj 时,我想要一些配置来创建 B 类的对象并移交给 A 类启动。

请有人帮我实现这种机制。

0 投票
3 回答
827 浏览

java - dalvik.system.PathClassLoader 无法转换为 java.net.URLClassLoader

Android - 将 jar 文件动态添加到 ClassLoader,如:

而且,错误:

此代码在 java-core 中运行良好,但不适用于 android。什么是解决方案?谢谢,

0 投票
2 回答
387 浏览

java - Java动态加载类问题

我正在尝试编写一个代码来编译和运行另一个java类,在它从一个字符串创建它之后。

我的问题是当我跑步时

它抛出一个 ClassNotFoundException。我的问题不在于包,因为如果我调试代码并在“getClassLoader”之前放置一个断点并重新加载类,那么我的代码工作正常,它会看到最近在应用程序中创建的类。

如何在运行时重新加载类以便 loadClass 工作?

0 投票
0 回答
133 浏览

java - 为序列化的对象动态获取类

我试图了解如何为序列化对象动态下载类。

我正在尝试这样做:

  1. 创建一个可序列化的对象。
  2. 创建一个序列化对象的服务器程序。
  3. 创建客户端程序并获取序列化对象。

现在,在客户端中,当它反序列化对象时,它需要.class. 截至目前,我正在输入.class客户端代码。

我们如何动态获取类?我确实在网上搜索并了解了“代码库”的概念。所有这些帖子都只显示了一个代码片段。

我怎么能做到这一点?我打算在.jar可能的地方使用http服务器。我怎样才能做到这一点?

0 投票
2 回答
6868 浏览

java - 使用 URLClassLoader 加载 .class 文件

我知道以前有人问过这个问题:

如何使用 URLClassLoader 加载 *.class 文件?

但是,由于缺乏示例,我不太了解。我目前正在做一个项目并尝试加载用户给定的 .class 对象,这些对象可以位于机器上的任何目录中。

最后一行给了我一个 ClassNotFoundException,从我的实验和理解用户给定的类函数必须在类路径中?

PS:第一次发布问题,请随时纠正我没有遵循适当方式的地方。

//解决方案

我在 [WillShackleford][1] 的慷慨帮助下得出的解决方案,该解决方案可以在给定的文件路径中加载 .class 文件。有关更多信息,请参阅代码及其给出的注释。

0 投票
1 回答
797 浏览

java - 动态类加载与注入

我正在开发的应用程序使用第三方服务进行客户验证。由于我们的客户可能使用不同的服务,我创建了一个通用接口,并希望稍后通过配置参数提供实际的实现。

我目前正在使用反射实例化该类:

但是我读到由于性能下降,应该在生产中避免动态类加载。

我知道注入技术,但我不想仅仅为一个案例引入一个全新的框架(及其所有的装饰)。

有没有更好的方法来实现这一目标?

0 投票
2 回答
157 浏览

java - Java 在加载后覆盖本机类

所以我的问题很简单,我有一个插件管理程序,它允许在初始程序启动后加载和运行插件。一切正常,我可以根据需要加载和卸载类,但我现在遇到的问题如下:

我现在正在尝试为该插件管理系统编写一个插件,该插件将负责所有网络,以防止每个插件托管自己的连接。问题是我不能使用引导类,因为插件是在运行时动态加载的(我什至不知道它是否存在,直到我寻找并加载它)但我仍然想覆盖普通的套接字类过滤正在发生的事情。我想使用插件覆盖的其他类也是如此,这样其他尝试使用这些类及其功能的插件将不再能够访问本机实现,而是必须通过我的实现。别问,我有理由:P

所以所有的东西都很快放在一起:我需要一种在运行时用我自己的实现动态覆盖原生类的方法,这样我加载的所有其他东西都将使用我的实现而不是原生的。有任何想法吗?

0 投票
1 回答
181 浏览

java - Java 在与 SystemClassLoader 相关的 ChildClassLoader 中动态加载类

我有一个带有抽象类的Java Web 应用程序,(我们称之为ClassA)部署在应用程序服务器上。这个 java web 应用程序还通过使用这个问题的接受响应的方法动态地从外部 jar 加载类。

一切正常,直到我加载一个ClassBClassA. 我在 SysOut 上收到一条java.lang.ClassNotFoundException: ClassA错误消息,指向加载类的行:urlClassLoader.loadClass(className);.

我以为我不会有问题,因为当我调用 时URLClassLoader.newInstance(),它是从默认的父类加载器创建的,我认为它应该是SystemClassLoader,我假设它包含 WebApp 类。

  • 我的任何假设是错误的吗?

  • 如何从外部 Jar 加载一个类,该 Jar 恰好从 WebApplication 类加载器中加载的父类扩展?

我尝试将我的 WebApp 的部署配置从 parent first 更改为 parent last,并得到了同样的错误。我也尝试Class.forName("ClassA")在执行该行之前执行一次,URLClassLoader.loadClass("ClassB")但再次遇到相同的错误。

0 投票
0 回答
64 浏览

java - Java:是否可以使用其现有调用执行方法的修改代码(在运行时更改)

我在 SO 上遇到了许多类似的问题,但仍在试图弄清楚我们是否可以在运行时替换方法体,以及是否可以通过对该方法的现有调用来执行修改后的方法。

在阅读了许多类似问题的答案后,我了解到我们可以在运行时替换任何用户定义的类。然后我们可以加载修改后的类(例如,修改后的类中有修改的方法),创建该类的实例,并调用修改后的方法。这个问题的公认答案对我理解这个概念非常有帮助。

基本上,该答案中使用的示例解释说,如果我们更改Test1.hello(),那将由类中的main方法选择,Test因为它正在创建Test1类的新实例并通过该实例调用 hello。

但是可能存在一些情况,hello()代码库中存在许多现有调用(例如 in Test2.java),我们希望在Test1动态加载类之后,所有现有调用都Test2将执行修改后的方法,而不是旧的.

我想知道这是否可能,或者我是否遗漏了什么。

提前非常感谢。

0 投票
1 回答
1175 浏览

java - 在 Java 中加载类运行时

我想做一个服务,它运行 24/7 并且可以加载新模块或已加载模块的更新版本而无需重新启动它。

我可以从 jar 文件中加载类,如下所示:

该软件已经使用数据库表对从模块加载的类进行一些配置,因此如果我将完整的类名存储在那里(可能还有 jar 的路径),我可以使用它。我的问题是,我可以这样做更好吗?这有点难以维护并且很容易破坏,我也不知道我是否可以用它加载已经加载的类。