我有一个用例,我想提供一个简单的 API 来扩展我的 scala 应用程序的功能。
在过去的几天里,我一直在尝试找到一个 java/scala DI 框架或库来为我执行以下操作:
- 标识类路径上的接口/特征的实现
- 在标记的站点上实例化并注入所述实现(重要特征:所有这些),最好带有注释
- 以上不能在编译器中发生,因为我需要一个插件架构,在 JVM 启动之前不引入插件
- 因此上述可能发生在 JVM 启动时(不需要热交换)
我越来越倾向于 OSGi DS,我是它的忠实粉丝,但由于 #4,我认为它是一种矫枉过正。
我查看了 guice、weld、scaladi 和 macwire,但无法立即找到执行此操作的简单方法。我的目标是让“插件”作者不必以任何方式了解我的注入/IoC 解决方案,除了偶尔的注释(最好是 JSR330)在注入站点我愿意处理更丑陋的事情。:-)
我是否必须在这里推出自己的解决方案,使用 OSGi,还是我在上述库中遗漏了一些微不足道的东西?
ps:我试图避开 OSGi 主要是因为它与我正在使用的应用程序框架交互(akka - 不确定捆绑/DS 生命周期与单个参与者系统混合得很好)