用Guice写Java - 编程入门网
用Guice写Java时间:2011-04-02 王咏刚简介 Java企业应用开发社区在连接对象方面花了很大功夫。你的Web应用如何访问中间层服 务?你的服务如何连接到登录用户和事务管理器?关于这个问题你会发现很多通用的和特 定的解决方案。有一些方案依赖于模式,另一些则使用框架。所有这些方案都会不同程度 地引入一些难于测试或者程式化代码重复的问题。你马上就会看到,Guice 在这方面是全 世界做得最好的:非常容易进行单元测试,最大程度的灵活性和可维护性,以及最少的代 码重复。 我们使用一个假想的、简单的例子来展示 Guice 优于其他一些你可能已经熟悉的经典 方法的地方。下面的例子过于简单,尽管它展示了许多显而易见的优点,但其实它还远没 有发挥出 Guice 的全部潜能。我们希望,随着你的应用开发的深入,Guice 的优越性也 会更多地展现出来。 在这个例子中,一个客户对象依赖于一个服务接口。该服务接口可以提供任何服务, 我们把它称为Service。
对于这个服务接口,我们有一个缺省的实现,但客户对象不应该直接依赖于这个缺省 实现。如果我们将来打算使用一个不同的服务实现,我们不希望回过头来修改所有的客户 代码。
我们还有一个可用于单元测试的伪服务对象。
简单工厂模式 在发现依赖注入之前,最常用的是工厂模式。除了服务接口之外,你还有一个既可以 向客户提供服务对象,也可以向测试程序传递伪服务对象的工厂类。在这里我们会将服务 实现为一个单件对象,以便让示例尽量简化。
客户程序每次需要服务对象时就直接从工厂获取。
用Guice写Java(2)时间:2011-04-02 王咏刚客户程序足够简单。但客户程序的单元测试代码必须将一个伪服务对象传入工厂,同 时要记得在测试后清理。在我们这个简单的例子里,这不算什么难事儿。但当你增加了越 来越多的客户和服务代码后,所有这些伪代码和清理代码会让单元测试的开发一团糟。此 外,如果你忘记在测试后清理,其他测试可能会得到与预期不符的结果。更糟的是,测试 的成功与失败可能取决于他们被执行的顺序。
最后,注意服务工厂的API把我们限制在了单件这一种应用模式上。即便 getInstance() 可以返回多个实例, setInstance() 也会束缚我们的手脚。转换到非单 件模式也意味着转换到了一套更复杂的API。 手工依赖注入 依赖注入模式的目标之一是使单元测试更简单。我们不需要特殊的框架就可以实践依 赖注入模式。依靠手工编写代 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |