Google Guice与PicoContainer进行依赖注入

我的团队正在研究依赖注入框架,并试图决定使用Google-Guice还是PicoContainer。

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

  • 小代码足迹 - 我的意思是小代码足迹是我们不希望在我们的代码库中随处存在依赖注入代码。 如果我们需要重新整理道路,我们希望它尽可能简单。
  • 性能 - 创建和注入对象时每个框架有多少开销?
  • 易用性 - 是否有很大的学习曲线? 我们是否必须编写一堆代码才能获得简单的工作? 我们希望尽可能少的配置。
  • 社区规模 - 较大的社区通常意味着项目将继续保持。 我们不想使用框架并且必须修复我们自己的错误;)我们沿途的任何问题都可以(希望)由框架的开发者/用户社区来回答。
  • 对比两个框架与列出的标准将不胜感激。 任何有助于比较两者的个人经验也会非常有帮助。

    免责声明:如果我问了一个与本次讨论无关的问题,我相当注意依赖注入,所以请原谅我的小心。


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

    耦合到框架

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

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

    Spring - Spring旨在让您避免在代码中提及任何Spring框架。 因为他们有很多其他的助手/实用程序等,但依赖于Spring代码的诱惑力非常强。

    性能

    Pico - 我不太熟悉Pico的速度特性

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

    春天 - 春天可能会很慢。 已经有一些工作要加快速度,使用JavaConfig库会加快速度。

    使用方便

    Pico - 配置简单。 Pico可以为你做一些自动决定。 不清楚它如何扩展到非常大的项目。

    Guice - 配置简单,只需添加注释并从AbstractModule继承即可将事物绑定在一起。 将配置保持在最低限度,可以很好地扩展到大型项目。

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

    社区大小

    皮科 - 小

    吉斯 - 中等

    春天 - 大

    经验

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

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

    春天 - 春天通常是我的默认选择。 也就是说,XML可能变得繁琐,导致减速烦人。 我经常最终使用手工制作的依赖注入和Spring的组合。 当你真的需要基于XML的配置时,Spring XML非常好。 Spring还花费了大量的精力来使其他框架更友好,因为它们通常在使用最佳实践(JMS,ORM,OXM,MVC等)时非常有用。

    参考

  • 微微
  • 吉斯
  • 弹簧
  • Spring / Guice / Pico比较
  • 另一个Spring / Guice性能比较

  • Jamie.mccrindle提供的答案其实很不错,但我很困惑,为什么Spring很明显是优先选择(包括Pico和Guice),Spring是默认选择。 IMO Spring的受欢迎程度已经达到了顶峰,现在它正在生成炒作(与其他所有“我也一样”的春季子项目都希望能够顺应春季潮流)。

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

    Pico的小尺寸和缺乏依赖性是一个不容小觑的主要胜利。 现在需要下载多少个megs来使用Spring? 这是一个巨大的JAR文件混乱,所有它的依赖。 直觉地认为,这样一个有效的“小”解决方案应该比Spring更好地执行扩展和执行。 春天的膨胀真的会让它变得更好吗? 这是奇怪的世界吗? 我不会假设Spring是“更可扩展的”,直到经过验证(并解释)为止。

    有时候创造一些好的东西(Pico / Guice),然后保持你的HANDS关闭,而不是增加无限的新版本的膨胀和厨房水槽功能,真的可以解决......


    注意:这是比评论/咆哮更多的回答

    PicoContainer非常棒。 如果他们只是修复他们的网站,我会切​​换回去。 现在非常混乱:

  • 这是最新的http://picocontainer.com,但许多页面都有格式化问题,而几页却根本不起作用。 它看起来像是从旧的内容自动转换的页面。
  • http://picocontainer.codehaus.org/在2.10.2版本中似乎被冻结了 - 如果页面上写着“嘿,你正在看一个旧的网站!”这将是非常好的
  • http://docs.codehaus.org/display/PICO/Home - 一个合成维基文档v 1.x,但它不会在页面上的任何位置说!
  • 我现在使用Guice 2.x,尽管它更大,功能更少。 查找文档要容易得多,而且用户组非常活跃。 然而,如果Guice 3的方向有任何迹象,那么Guice开始臃肿起来,就像Spring早年回归一样。

    更新:我向Pico Container人员发布了评论,他们对网站进行了一些改进。 现在好多了!

    链接地址: http://www.djcxy.com/p/82269.html

    上一篇: Google Guice vs. PicoContainer for Dependency Injection

    下一篇: Determining when to use Dependency Injection