我已经阅读了有关 Google Guice 的信息,并了解其他依赖注入方法的一般问题,但是我还没有看到有人在“实践”中使用 Guice 的例子,它的价值变得清晰。
我想知道是否有人知道任何这样的例子?
使用 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;
}
}
ClassB
现在与 松散耦合A
,Guice 负责提供实例A
而不是B
实例化它。有了这个,你可以扩展它来提供 to 的接口,A
如果B
你想对你的应用程序进行单元测试,实现可以是一个 Mock 对象。
话虽如此,到目前为止我们只是在讨论依赖注入的好处。除了依赖注入之外,使用 Google Guice 的好处是:
@Inject
注释构造函数。这就是它的概述。但是随着您对 Guice 的深入了解,它还有更多的好处。一个简单的现实生活示例是,如果您将GWT 与 MVP 实现一起使用,则 GWT 应用程序中的组件/小部件非常松散耦合,并且彼此之间没有紧密集成。
也许你应该回到过去,仔细看看 Guice 想要解决的问题。要了解 Guice 背后的动机,Bob Lee: I Don't Get Spring news on TheServerSide.COM(及其评论)是一个完美的起点。然后,继续发布Google Guice、Java 依赖注入框架(和评论)和技术讲座:Bob Lee 关于 Google Guice(和评论)。
就我个人而言,我分享了对邪恶 XML 的担忧:XML 配置地狱、XML 和可能的运行时错误、容易出错和不利于重构的字符串标识符等等。实际上,我相信对 Spring 和并发持怀疑态度对每个人都有好处(包括春天)。因此,我很高兴看到 DI 框架领域的新参与者,尤其是利用 Java 5 特性(为了类型安全的泛型和注释)的现代框架。
而且因为 Google 在关键任务应用程序中运行 Guice(几乎每个基于 Java 的应用程序也是基于 Guice 的应用程序:AdWords、Google Docs、Gmail,甚至是Guice²中“Crazy” Bob Lee 报道的 YouTube ),我可以'不要相信 Guice 是完全错误的并且没有提供任何价值。遗憾的是,我认为 Google 不会提供太多这些应用程序的代码作为示例……但是您可能会在使用 Guice 的应用程序列表和/或3rd party Guice 插件列表中找到有趣的东西。或者查看Guice²中提到的书籍。或者问鲍勃:)
我认为优势在于对接口、测试和代理进行编码。
对接口进行编码有助于保持代码正确分层,可以注入模拟进行测试,并让您自动生成代理,因此客户端代码无需担心实现。
Guice、Spring、PicoContainer 和所有 DI 框架都是如此。
够简洁吗?