是否需要使用Scala蛋糕模式进行依赖注入重新编译?

时间:2013-11-17 21:47:16

标签: spring scala

使用Spring依赖注入,可以通过调整XML文件在运行时交换依赖项。

我认为使用Scala蛋糕模式依赖注入是不可能的,因为依赖关系在编译时连接并且更改依赖关系需要重新编译? 如果是这样,Spring依赖注入有一个优势就是使用Scala蛋糕模式进行依赖注入?

1 个答案:

答案 0 :(得分:1)

是的,使用你需要重新编译的蛋糕模式。蛋糕模式的重点是做编译时依赖注入:) 使用spring,您将返回“经典”(在java世界中)运行时依赖注入,这是通过反射完成的。

使用运行时依赖项注入,您可以通过重新启动整个容器或使用特定模块(如jrebel)仅更新部分上下文来在运行时交换依赖项。作为交换,您在应用程序启动时付出代价,因为您的容器必须解析XML,实例化所有对象并连接它们。在弹簧的情况下,布线可能相当复杂,需要多次通过才能完成。 通常,您不希望在生产代码中在运行时交换出依赖关系(有一些有效的用例,但我很少遇到它们)。

另一方面,蛋糕模式在编译时验证,必须预先确定布线(忘记@PostConstruct)。避免复杂的布线周期实际上是一件好事:)您还将避免加载和解析XML文件(尽管在我的理解中,当前首选的配置方法是使用代码而不是XML)。接线错误将在蛋糕中更快出现,为您提供更快速的反馈。

最后但并非最不重要的是,在函数编程语言(例如scala)中还有其他DI机制,例如使用IO或Reader Monad。有关此类机制的更多信息,请参阅: http://blog.originate.com/blog/2013/10/21/reader-monad-for-dependency-injection/ http://fr.slideshare.net/debasishg/dependency-injection-in-scala-beyond-the-cake-pattern 要么 Using Reader Monad for Dependency Injection