从对象创建和引用小议解耦
2010-07-12 00:00:00 来源:WEB开发网在 清单 5 中,基于前一种解决方式做了如下修改:
去除了原先在 CalculatorUI 构造函数中关于从 GlobalRegistry 中获取 ExpressionEvaluator 实现实例的初始化代码,而为其添加了 setExpressionEvaluator 方法以实现对 ExpressionEvaluator 的设置。
使用 Spring 的配置文件实现运行时的注入,<ref> 标签用于关联 ExpressionEvaluator 实例和 CalculatorUI实例,即运行时注入的实例对象。示例中的两种配置文件分别是直接使用 ExpressionEvaluatorImpl 和使用 ExpressionEvaluatorFactory,实际应用中可依据需要和项目约定使用任一种方式。
在第五种解决方式中,依托于 Spring 项目,CalculatorUI 和 ExpressionEvaluator 得到了进一步的解耦。通过在 XML 配置中引用的设置,Spring 容器会在运行时将期望的 ExpressionEvaluator 实现的实例注入到 CalculatorUI 中去。至此,CalculatorUI 甚至不需关心如何获取 ExpressionEvaluator 实例对象。后续使用过程中,如果需要更换新的实现,需要的是修改 Spring 的 XML 配置文件,可以很方便地更新相关实现。
另外,熟悉 Spring 的读者知道其独特的 AutoWire 的功能,简而言之,Spring 容器会按照一定的规则自动寻找适合的 Bean 实例对象进行注入操作,常见的规则包括通过名称,类型等匹配。适当的使用该功能,会使应用程序的耦合性更低,相对而言也更加灵活。
在刚发布的 Java EE 6 平台包含的众多组件中,JSR-299 : Contexts and Dependency Injection for the JavaEE platform/JSR-330 : Dependency Injection for Java 是最受瞩目的技术之一 。究其原因,其提供的依赖注入特性功不可没。在进一步介绍 JSR-330 注入技术之前,首先看一下应用程序代码的变化。
更多精彩
赞助商链接