2

我有一个用例,我想提供一个简单的 API 来扩展我的 scala 应用程序的功能。

在过去的几天里,我一直在尝试找到一个 java/scala DI 框架或库来为我执行以下操作:

  1. 标识类路径上的接口/特征的实现
  2. 在标记的站点上实例化并注入所述实现(重要特征:所有这些),最好带有注释
  3. 以上不能在编译器中发生,因为我需要一个插件架构,在 JVM 启动之前不引入插件
  4. 因此上述可能发生在 JVM 启动时(不需要热交换)

我越来越倾向于 OSGi DS,我是它的忠实粉丝,但由于 #4,我认为它是一种矫枉过正。

我查看了 guice、weld、scaladi 和 macwire,但无法立即找到执行此操作的简单方法。我的目标是让“插件”作者不必以任何方式了解我的注入/IoC 解决方案,除了偶尔的注释(最好是 JSR330)在注入站点我愿意处理更丑陋的事情。:-)

我是否必须在这里推出自己的解决方案,使用 OSGi,还是我在上述库中遗漏了一些微不足道的东西?

ps:我试图避开 OSGi 主要是因为它与我正在使用的应用程序框架交互(akka - 不确定捆绑/DS 生命周期与单个参与者系统混合得很好)

4

3 回答 3

1

如果您喜欢 DS(而且它似乎非常适合您的问题),那么为什么不使用 Akka 解决任何问题呢?我很确定其他人会愿意提供帮助,因为它看起来是一个有趣的组合。

于 2017-04-14T06:40:09.803 回答
1

我看看 Scaldi 目前提供了哪些功能。我发现它已经足够成熟了。因此,使用这个 DI 库来实现您的目标并不难。例如,您只能实现用于搜索在某些配置文件或其他任何内容中特别注释/指定的代码。

于 2017-02-10T12:10:58.640 回答
1

如果您负担得起,最好(不仅对您,而且对整个生态系统)接受彼得的建议。

不过,务实地说,Java 具有OOTB 的SPI,在您的特定情况下可能是最简单的方法。

于 2017-04-14T10:21:28.553 回答