我读过关于Google Guice的内容,并了解其他依赖注入方法的一般问题,但是我还没有看到有人在实践中使用Guice的例子,其价值变得清晰。
我想知道是否有人知道这些例子吗?
答案 0 :(得分:43)
使用Google Guice轻松进行单元测试只是高级优势。有些人可能甚至不在他们的项目中使用单元测试。人们一直在使用Spring / Dependency Injection,而不仅仅是单元测试。
使用Google Guice的低级优势在于您的应用程序的凝聚力,您在项目中的类可以在彼此之间松散耦合。我可以为另一个类提供一个类,而不会相互依赖。
考虑这个例子:
public class A{
}
public class B{
A a = new A();
}
B类与A类紧密耦合,换句话说,它依赖于A类的存在。
但是对于Guice,我可以把它松散地耦合成这样:
public class B{
private A a;
@Inject
public B(A a){
this.a = a;
}
}
B类现在松散地耦合到A,而Guice负责提供A的实例,而不是B必须实例化它。有了这个,您可以扩展它以提供A到B的接口,如果您想对应用程序进行单元测试,则实现可以是Mock对象。
说过我们到目前为止只讨论依赖注入的好处。除了依赖注入之外,使用Google Guice的好处是:
这是它的概述。但随着你对Guice的深入了解,它还有很多好处。一个简单现实生活中的例子就是如果你使用GWT with MVP implementation,你的GWT应用程序中的组件/小部件是非常松散耦合的,而不是彼此紧密集成。
答案 1 :(得分:17)
也许你应该回过头来仔细研究Guice想要解决的问题。要了解Guice背后的动机,TheServerSide.COM上的Bob Lee: I Don't Get Spring新闻(及其评论)是一个完美的起点。然后,继续发布Google Guice, A Java Dependency Injection Framework(和评论)和Tech Talk: Bob Lee on Google Guice(以及评论)的公告。
就个人而言,我分享了对邪恶的XML的关注:XML配置地狱,XML和可能的运行时错误,容易出错和重构 - 不良的字符串标识符等等。实际上,我认为对Spring的怀疑观点和同意是好的为每个人(包括春天)。我很高兴看到DI框架中的新玩家,特别是利用Java 5功能的现代框架(为了类型安全而使用泛型和注释)。
因为Google在任务关键型应用程序中运行Guice(几乎每个基于Java的应用程序都是基于Guice的应用程序: AdWords ,Google Docs,Gmail,甚至是YouTube报道的“Crazy” “鲍勃李在Guice²),我不敢相信Guice是完全错误的,并没有提供任何价值。遗憾的是,我认为Google不会提供这些应用程序的大量代码作为示例...但您可能会在list of applications that use Guice和/或list of 3rd party Guice addons中找到有趣的内容。或者查看Guice²中提到的书籍。或者问鲍勃:)
答案 2 :(得分:4)
我认为优势在于对接口,测试和代理进行编码。
编码到接口有助于保持代码正确分层,可以为测试注入模拟,并允许您自动生成代理,因此客户端代码无需担心实现。
对于Guice,Spring,PicoContainer和所有DI框架都是如此。
足够简洁?