So I am wondering, should I be using singleton objects as the examples seem to imply? If this is the case, what is the advantage compared to the old static methods approach?
依赖注入是一种将应用程序连接在一起的技术.您编写的组件并不直接相互依赖.而是将组件注入彼此.这样,您只需交换应用程序的整个部分,而无需触及任何一行代码.在编写单元测试时,依赖注入特别有用.
与静态方法相比,您可以使用所有那些花哨的OOP内容.问题基本上是“静态方法有哪些缺点?”
Are there specific object types (e.g., controllers?) that should be singletons, and are there performance implications to not marking objects as singletons?
Play或更具体地说,只要默认情况下注入依赖项,Guice就会创建一个新对象.将它们标记为@Singleton将只创建一个对象,并在所有注入中重复使用完全相同的对象.换句话说:单身人士保存一些对象创建和垃圾收集,但需要同步来初始化对象.
根据您的经验来解决使用@Singleton时的问题(source):
>有状态对象,例如配置或计数器
>构造或查找成本高昂的对象
>绑定资源的对象,例如数据库连接池.
Guice提供了非常全面的documentation顺便提一下.我强烈建议浏览一段时间.