【问题标题】:Is it possible to use Spring within Eclipse plugins?是否可以在 Eclipse 插件中使用 Spring?
【发布时间】:2010-10-05 14:03:29
【问题描述】:

是否可以从 Eclipse 插件内部为 DI 使用 Spring 容器?

我想知道,因为我知道 Eclipse 会在类加载、在插件中查找内容等方面引起很多问题。

该插件旨在作为 JAR 分发。

【问题讨论】:

    标签: eclipse spring plugins


    【解决方案1】:

    是的,但您需要 Spring DM http://www.springsource.org/osgi

    【讨论】:

      【解决方案2】:

      答案是肯定的。您可以使用 Spring DM,但不是必须的。它可能会更好。

      我在没有 Spring DM 的情况下做到了,主要关注的是类加载问题(不确定 Spring DM 是否解决了这些问题,但我想应该)。假设您将 Spring JAR 与依赖项捆绑在一个单独的插件中,您将需要使用调用插件的类加载器加载上下文。

      例子:

      • 插件 A - 您的功能插件
      • 插件 B - 导出 spring 包的 Spring lib 插件

      插件 A 依赖于 B。插件 A 启动时,会加载应用程序上下文,调用此加载时,您需要执行以下操作:

      Thread.currentThread().setContextClassLoader(PluginAActivator.class.getClassLoader())
      

      这样类的加载将在您自己的类加载器下进行。现在您可以使用ClassPathXmlApplicationContext 从您的类路径加载配置 XML。

      一个小提示:默认 ClassPathXmlApplicationContext 在加载时验证您的 XML。您可能希望禁用它或将您的 XML 指向本地模式(而不是 springframework.org 上的标准 Spring 模式),否则,您将连接到 Internet 以在加载时下载模式文件,并且脱机工作将失败。

      【讨论】:

      • 在 OSGi 中使用纯 Spring 的许多地方都会给您带来痛苦。如果您打算继续将 Spring 与 OSGi 一起使用,我强烈建议您迁移到 Spring DM。
      • 如果您使用 Spring DM,您将不需要在代码中管理上下文类加载器,并且您也将不再手动创建应用程序上下文。
      • 我写这个答案已经过去了一段时间。实际上,Spring OSGi(以前称为 Spring DM)在一个简洁的包中提供了您所需要的一切,包括一个可以毫无干扰地工作的应用程序上下文以及通过在 Spring XML 中定义它们来公开 OSGi 服务的能力。试一试。
      • +1 已经为此奋斗了一段时间。感谢您指出我可以自己更换类加载器。有时事情是如此简单,以至于被忽视了。
      【解决方案3】:

      您的帖子有代码示例吗? 这将是伟大的,因为我在这附近徘徊了一段时间。

      干杯!

      【讨论】:

      • 不要偷懒 - Spring 站点在记录他们的库方面做得很好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-10
      • 2020-07-17
      • 2012-01-10
      • 2011-02-14
      • 2013-10-19
      • 2011-08-06
      • 2011-11-02
      相关资源
      最近更新 更多