如果我可以利用
Scala 2.8的命名和默认参数功能,我宁愿在
JavaBean属性注入上使用构造函数注入.存在哪些IoC容器支持或可以轻松扩展? (所需信息在运行时的scala.reflect.ScalaSignature注释中存在.)
我也对IoC容器有一些基本的(?)期望:
>自动布线(按目标类别/特征或注释,一对一和一对多)
>显式注入(显式布线)没有太多麻烦(像Guice那样弱).就像用户在新的ConnectionPool中注入那样(user =“test”).
>关闭时清理的生命周期回调(按正确顺序)
Spring可以做到这些,但是它不支持命名参数.我已经考虑过使用factorybean-s来桥接Scala和Spring,但就我看来,这意味着太麻烦(样板或代码生成).
解决方法
A部分
我有一个正在进行中的反射库,它解析Scala签名,目前能够解析命名参数:https://github.com/scalaj/scalaj-reflect
不幸的是,我还没有将它重新绑定到Java反射中以便能够调用方法,也没有添加逻辑来解析默认值(尽管这应该是微不足道的).我的待办事项清单上的这两个功能都非常高:)
这不是IoC容器本身,但它是我的另一个项目的先决条件:https://github.com/scalaj/scalaj-spring.scalaj-spring的工作停止了,当它变得非常明显,我将无法做任何有价值的进一步进展,直到我有基于签名的反思.
B部分
所有这些东西都是针对大企业人士的.那些别无选择,只能将他们闪亮的新Scala代码集成到一些笨重的遗留系统……如果那不是你的用例,那么你可以直接在Scala中做Scala DI.
Lift banner:http://www.assembla.com/wiki/show/liftweb/Dependency_Injection下提供了DI支持
你也应该寻找蛋糕模式的参考