Google Guice vs. PicoContainer for Dependency Injection

我的团队正在研究依赖注入框架,并试图在使用Google-Guice和PicoContainer之间做出决定。

我们正在我们的框架中寻找几件事:

  1. 小代码占用空间 - 我所说的小代码占用是指我们不希望在代码库中到处都有依赖注入代码垃圾。如果我们需要在未来进行重构,我们希望它尽可能简单。
  2. 性能 - 创建和注入对象时,每个框架有多少开销?
  3. 易用性 - 学习曲线是否很大?我们是否必须编写成堆的代码才能使某些简单的工作变得简单?我们希望尽可能少的配置。
  4. 社区规模 - 较大的社区通常意味着项目将继续维护。我们不想使用框架,必须修复自己的错误;)此外,我们在此过程中遇到的任何问题都可以(希望)由框架的开发人员/用户社区来回答。

如能将这两个框架与所列标准进行比较,将不胜感激。任何有助于比较两者的个人经历也将是非常有帮助的。

免责声明:我对依赖注入相当陌生,所以如果我问了一个与此讨论无关的问题,请原谅我的新手。


答案 1

您可能希望将Spring包含在您正在考虑的依赖注入框架列表中。以下是您问题的一些答案:

耦合到框架

Pico - Pico倾向于阻止二传注射,但除此之外,您的课程不需要了解Pico。只有布线需要知道(适用于所有DI框架)。

Guice - Guice 现在支持标准的 JSR 330 注释,因此您的代码中不再需要特定于 Guice 的注释。Spring还支持这些标准注释。Guice人员使用的论点是,如果没有运行Guice注释处理器,如果您决定使用其他框架,这些处理器应该不会产生影响。

Spring - Spring旨在允许您避免在代码中提及Spring框架。因为他们确实有很多其他的助手/实用程序等,所以依赖Spring代码的诱惑非常强烈。

性能

笔克 - 我不太熟悉笔克的速度特点

Guice - Guice被设计得很快,参考文献中提到的比较有一些数字。当然,如果速度是首要考虑因素,则应考虑使用Guice或手动布线

春天 - 春天可能很慢。已经有工作使它更快,使用JavaConfig库应该可以加快速度。

易用性

Pico - 易于配置。笔克可以为您做出一些自动布线决定。不清楚它如何扩展到非常大的项目。

Guice - 易于配置,您只需添加注释并从 AbstractModule 继承即可将内容绑定在一起。可很好地扩展到大型项目,因为配置保持在最低限度。

Spring - 相对容易配置,但大多数示例使用Spring XML作为配置方法。随着时间的推移,Spring XML文件可能会变得非常大和复杂,并且需要一些时间来加载。考虑使用弹簧和手摇依赖注入的混合来克服这一点。

社区规模

笔克 - 小

吉斯 - 中

弹簧 - 大

经验

笔克 - 我对笔克没有太多经验,但它不是一个广泛使用的框架,所以很难找到资源。

Guice - Guice是一个流行的框架,当你有一个大型项目在开发中重新启动时,它对速度的关注是受欢迎的。我对配置的分布式性质感到担忧,即不容易看到我们的整个应用程序是如何组合在一起的。在这方面,它有点像AOP。

春天 - 春天通常是我的默认选择。也就是说,XML可能会变得很麻烦,并且由此产生的减速令人讨厌。我经常最终使用手工制作的依赖注入和弹簧的组合。当你真正需要基于XML的配置时,Spring XML是相当不错的。Spring还投入了大量精力来使其他框架更加依赖注入友好,这可能很有用,因为它们在这样做时经常使用最佳实践(JMS,ORM,OXM,MVC等)。

引用


答案 2

jamie.mccrindle给出的答案实际上非常好,但是当我很清楚有更好的替代品(Pico和Guice)可用时,为什么Spring是默认选择感到困惑。IMO Spring的受欢迎程度已经达到了顶峰,现在它目前依靠产生的炒作(以及所有其他希望追随Spring潮流的“我也是”的Spring子项目)生活。

Spring唯一真正的优势是社区规模(坦率地说,由于规模和复杂性,这是需要的),但Pico和Guice不需要一个庞大的社区,因为他们的解决方案更干净,更有条理,更优雅。Pico似乎比Guice更灵活(你可以在Pico中使用注释,也可以不使用 - 它非常有效)。(编辑:意思是说它非常灵活,并不是说它效率不高。

笔克的微小规模和缺乏依赖性是一个重大胜利,不应该被低估。您现在需要下载多少兆才能使用Spring?这是一堆巨大的jar文件,以及所有的依赖项。直观地思考,这样一个高效且“小”的解决方案应该比Spring之类的解决方案更好地扩展和性能。春天的膨胀真的会让它的规模变得更好吗?这是怪异的世界吗?在得到证明(和解释)之前,我不会假设Spring“更具可扩展性”。

有时创造一些好东西(Pico / Guice),然后让你的手远离它,而不是添加膨胀和厨房水槽功能与无尽的新版本确实有效...


推荐