如果我可以利用 Scala 2.8 的命名和默认参数功能,我更喜欢使用构造函数注入(inject)而不是 JavaBean 属性注入(inject)。是否存在任何支持该功能或可以轻松扩展的 IoC 容器? (所需的信息在运行时位于类的 scala.reflect.ScalaSignature
注释中。)
我对 IoC 容器也有一些基本的(?)期望:
user
以这种方式注入(inject) new ConnectionPool(user="test")
. Spring 显然可以做到这些,但它不支持命名参数。我考虑过使用
FactoryBean
-s 桥接Scala和Spring,但据我所知,这意味着太多麻烦(样板或代码生成)。
最佳答案
第一部分
我有一个正在进行中的反射库,它解析 Scala 签名并且当前能够解析命名参数:https://github.com/scalaj/scalaj-reflect
不幸的是,我还没有将它绑定(bind)回 Java 反射以便能够调用方法,也没有添加逻辑来解析默认值(尽管这应该是微不足道的)。这两个功能在我的待办事项 list 上都非常重要:)
这本身不是 IoC 容器,但它是我的另一个项目的先决条件:https://github.com/scalaj/scalaj-spring . scalaj-spring 的工作停止了,因为很明显,在基于签名的反射到位之前,我无法取得任何有值(value)的进一步进展。
B部分
无论如何,所有这些东西都是为大企业的人准备的。那些别无选择,只能将他们 Shiny 的新 Scala 代码集成到一些庞大的遗留系统中的人……如果这不是您的用例,那么您可以直接在 Scala 中执行 Scala DI。
Lift 旗帜下提供了 DI 支持:http://www.assembla.com/wiki/show/liftweb/Dependency_Injection
您还应该四处寻找蛋糕图案的引用资料
关于scala - 支持使用 Scala 命名/默认参数的构造函数注入(inject)的 IoC 容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5272624/