IoC容器支持使用Scala名为/ default参数的构造函数注入?

时间:2011-03-11 11:58:30

标签: scala constructor ioc-container named-parameters

如果我可以利用Scala 2.8的命名和默认参数功能,我宁愿在JavaBean属性注入上使用构造函数注入。存在哪些IoC容器支持或可以轻松扩展? (所需信息在运行时的scala.reflect.ScalaSignature注释中存在。)

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

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

Spring可以做到这些,但是它不支持命名参数。我已经考虑使用FactoryBean - s来桥接Scala和Spring,但就我看来,这意味着太麻烦(样板或代码生成)。

4 个答案:

答案 0 :(得分:3)

A部分

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

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

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

B部分

所有这些东西都是针对大企业人士的。那些别无选择,只能将他们闪亮的新Scala代码集成到一些笨重的遗留系统......如果那不是你的用例,那么你可以直接在Scala内部进行Scala DI。

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

你也应该寻找蛋糕模式的参考

答案 1 :(得分:2)

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

答案 2 :(得分:1)

  

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

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

答案 3 :(得分:1)

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

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