gpt4 book ai didi

java - 稍后如何使用另一个 .jar 或 .java 扩展我的 jar

转载 作者:行者123 更新时间:2023-11-30 11:54:39 24 4
gpt4 key购买 nike

我想象我的应用程序是这样的:我有一个加密文件的应用程序。我想稍后用另一个密码扩展我的应用程序(jar)中的密码。因此,我将有一个包含密码(jar 或 java 文件)的文件夹,我的应用程序将从该文件夹中读取文件。然后,在 GUI 中,将有一个包含文件(jar 或 java)的列表,其中有一个方法加密和解密(我会用反射来测试它)。用户将选择一个。

有人可以给我一个建议吗?如何让它可以扩展?或者我的应用程序 (.jar) 如何与另一个 .jar、.java 文件一起工作(读取并运行它们)?

最佳答案

另一种方法是 java.util.ServiceLoader 机制。 (阅读文档。)

您的附加 jar 将包含一个文件 META-INF/services/my.package.Cipher列出你的 Cipher 接口(interface)(或抽象类)的所有实现,然后你可以说

ClassLoader cipherLoader =
new URLClassLoader(new URL[]{new URL("jar:file:myAdditional.jar")},
Cipher.class.getClassLoader());
ServiceLoader<Cipher> serviceLoader = ServiceLoader.load(Cipher.class, cipherLoader);
for(Cipher c : serviceLoader) {
c.encrypt(...);
}

使用 ServiceLoader要求您的实现具有公共(public)无参数构造函数 - 如果没有,请改用 ServiceLoader对于一些工厂接口(interface)。

URL 应该是 jar:类所在的 jar 文件的 URL,或指向 .class 所在根目录的非 jar URL文件在(在它们的包结构中)。

关于java - 稍后如何使用另一个 .jar 或 .java 扩展我的 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5522645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com