scala - 支持使用 Scala 命名/默认参数的构造函数注入(inject)的 IoC 容器?

标签 scala constructor ioc-container named-parameters

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

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

  • Autowiring (通过目标类/特征或注释,一对一和一对多)
  • 显式注入(inject)(显式接线)没有太多麻烦(就像 Guice 在那里很弱)。点赞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/

    相关文章:

    .net - 使用 MEF 按命名空间解析导入

    c# - 如何覆盖在 CaSTLe Windsor 中注册的组件?

    Scala:如果在匹配案例中

    scala - Specs2 - 如何吞掉异常

    scala - 为什么 spark-shell 因 NullPointerException 而失败?

    javascript - JavaScript 中正确的 'private' 变量初始化

    c++ - 如何覆盖子类中的抽象类构造函数

    java - 调用构造函数的设计模式

    dependency-injection - 比较温莎城堡、Unity 和 StructureMap

    java - Akka 集群 Java API 示例