【问题标题】:Dynamically adding beans and jars to Java application将 bean 和 jar 动态添加到 Java 应用程序
【发布时间】:2016-09-27 11:55:34
【问题描述】:

对于一个正在进行的项目,我们正在寻找一种可能性,可以将 jar 文件动态下载并加载到正在运行的应用程序中。除了下载文件(这可能相当简单)之外,我不知道有任何解决方案可以自动将 jar 添加到类路径并发现注释(如 CDI bean)。

给定这样一个系统,如果@Inject 注解不会抛出运行时故障,那么将非常方便

目前有这样的系统吗? spring 或 OSGi 是否适合这种需求? 任何想法 Jigsaw 项目在尝试在应用程序级别上实现这一目标时会有多接近?

【问题讨论】:

  • 看起来像是一项需要反思的工作。
  • Jigsaw 将(仍然)不解决动态加载,只是一个(远)更好的模块概念。 OSGi 确实是最好的方法,也用于卸载 jar 或其他版本。
  • 史蒂文·德格鲁特,我来自未来,我回到了过去,写这篇评论告诉你这是个坏主意,哈哈

标签: java spring jakarta-ee cdi


【解决方案1】:

我认为你需要 OSGI,使用像 Karaf 这样的 OSGI 容器:https://karaf.apache.org

在标准java中提供ServiceLoaderhttps://docs.oracle.com/javase/tutorial/ext/basics/spi.html

【讨论】:

    【解决方案2】:
    1. 我建议你不要走那条路
    2. 应该可以在不使用 OGSI 的情况下动态加载 jar 文件。关键字是类加载器,尤其是在与适当的层次结构一起使用时。以下答案应该会给您一个想法:How should I load Jars dynamically at runtime? 但请记住,这可能会导致严重的安全问题
    3. 您在 2 处遵循了路径。即使我建议您不要这样做。但是现在您最终会遇到您使用的框架的上下文不知道这些类的情况。大多数 IOC 框架都会有这个问题。因为他们在启动时建立了上下文。为此创建了一些用于开发目的的库(spring-loaded、spring dev tools、JRebel)。如果您的 IOC 框架支持它,那就去吧。
    4. 关于处理不可用的罐子。对此进行研究的最佳点是 Spring Boot 及其自动配置机制。它检查某些类/jars(不确定是否诚实)是否可用,并为这种情况添加额外的行为。但这仍然是应用程序启动解决方案,而不是运行时 IOC 解决方案。

    【讨论】:

      猜你喜欢
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      • 2016-03-04
      • 2023-04-02
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多