4

如果我可以利用 Scala 2.8 的命名和默认参数功能,我更喜欢使用构造函数注入而不是 JavaBean 属性注入。是否存在任何支持该功能或可以轻松扩展的 IoC 容器?scala.reflect.ScalaSignature(所需的信息在类的注释中运行时。)

我对 IoC 容器也有一些基本的(?)期望:

  • 自动装配(通过目标类/特征或注释,一对一和一对多)
  • 显式注入(显式接线)没有太多麻烦(就像 Guice 在那里很弱)。就像user是那样注入的new ConnectionPool(user="test")
  • 关闭时清理的生命周期回调(按正确顺序)

Spring 显然可以做到这些,但它不支持命名参数。我曾考虑使用FactoryBean-s 来桥接 Scala 和 Spring,但据我所知,这意味着太多麻烦(样板文件或代码生成)。

4

4 回答 4

3

第一部分

我有一个正在进行中的反射库,它解析 Scala 签名并且目前能够解析命名参数:https ://github.com/scalaj/scalaj-reflect

不幸的是,我还没有将它绑定回 Java 反射以便能够调用方法,也没有添加逻辑来解析默认值(尽管这应该是微不足道的)。这两个功能在我的待办事项清单上都非常重要:)

这本身不是 IoC 容器,但它是我的另一个项目的先决条件:https ://github.com/scalaj/scalaj-spring 。scalaj-spring 的工作停止了,因为很明显,在基于签名的反射到位之前,我无法取得任何有价值的进一步进展。

B部分

无论如何,所有这些东西都是为大企业的人准备的。那些别无选择,只能将他们闪亮的新 Scala 代码集成到一些庞大的遗留系统中的人……如果这不是您的用例,那么您可以直接在 Scala 中执行 Scala DI。

Lift 横幅下提供了 DI 支持:http ://www.assembla.com/wiki/show/liftweb/Dependency_Injection

您还应该四处寻找蛋糕图案的参考资料

于 2011-03-11T17:18:22.530 回答
2

Scala 中的另一个依赖注入框架是subcut

于 2011-08-10T08:34:33.100 回答
1

我曾考虑使用 FactoryBean-s 来桥接 Scala 和 Spring,但这意味着太多麻烦

我不确定我是否理解复杂性。在 Scala 中实现 Spring FactoryBeans 实际上非常简单。检查这个小文章 http://olegzk.blogspot.com/2011/07/implementing-springs-factorybean-in.html

于 2011-07-10T15:15:22.900 回答
1

我刚刚发布了 Sindi,一个用于 Scala 编程语言的 IoC 容器。

http://aloiscochard.github.com/sindi/

于 2011-08-10T08:17:13.913 回答