2015-04-03 93 views
-1

我试图做一个应用程序,将能够从外部.jar文件加载类。但是,我需要引用它将按类型加载的类(它是Sax分析器的DefaultHandler的孙类)。动态加载一个扩展另一个类(来自jar)

我想我会做这种方式:

我将定义一个抽象类,锤扩展了DefaultHandler

在外部文件将延长锤子类(我们称之为外部类SpecialHammer)

我将使用URLLoader加载SpecialHammer。


的问题是,我不知道如何(在哪里)来定义锤,以确保应用程序认为它实际上是加载SpecialHammer扩展它知道锤。我试着在应用程序和外部.jar文件中放入相同的Hammer类,但它不起作用:/

我基本上需要知道如何在两个jar之间共享一个抽象类,以便他们都知道他们正在尝试到同一班。

我使用Eclipse,如果这是任何帮助。

+0

只是外部JAR添加到项目的类路径 – Brovoker 2015-04-03 13:22:21

+0

这是可悲的不是一点 - 我想要的应用程序,而不需要重新编译的可扩展(它会读取XML文件,用户将有提供一个特定的类来处理xml读取 - 因为我不能依靠xml被格式化为相同的方式。) – Nouth 2015-04-03 13:48:50

回答

0

在理论上应用程序JAR需要持有一个接口,这个接口需要通过类扩展被用来所以可能最好解析有它在依赖同时在客户端和处理应用程序可以共享。

我认为在你的例子中共享的类将是Hammer(抽象类)和DefaultHammer,这样客户端可以选择从哪个类扩展。

因此,您将在common.jar中具有抽象类Hammer和DefaultHammer,并且application.jar和client.jar都将使用common.jar作为依赖项。

或许有点偏离主题,但也许更好的解决方案,取决于用户/客户端将使用Java的SPI接口(或自己推出)。或者也许是Byteman,它允许你将代码注入到JVM中(是一个将java代码包装为-agent选项的DSL)。

Blog about using Byteman

+0

好吧,谢谢:)我认为你刚解决了我的问题。 – Nouth 2015-04-07 19:49:46

相关问题