从对象创建和引用小议解耦
2010-07-12 00:00:00 来源:WEB开发网清单 6. 计算器实现方式六 (WebBeans)
import javax.inject.Inject;
public class CalculatorUI {
@Inject
private ExpressionEvaluator expressionEvaluator;
public CalculatorUI() {
}
public String evaluate(String expression) {
if (expression == null || expression.isEmpty()) {
throw new IllegalArgumentException("[" + expression +
"] is not a valid expression");
}
return expressionEvaluator.evaluate(expression);
}
}
如 清单 6 所展示,CalculatorUI 类中出现了一个 Inject 标识,在 JSR-299 中使用其标识注入点,即容器会在运行时对其执行注入操作。该标识可以标注在类成员变量,构造函数以及普通函数上。那么 Web Beans 容器是如何知道将哪个实例注入?其是通过如下两个标准检索对应的实现:
实现类必需具备注入参数所要求的匹配类型,以本例而言,实现类必需实现 ExpressionEvaluator 接口。事实上针对不同类型的 Web Beans 之间规则略有差别,详细情况请参照 JSR-299 规范。
实现类具备所有注入点所要求的 Qualifier。在 JSR-299 规范中,允许用户自定义匹配标识,容器在检索实现类时会校验注入点参数和实现类是否具有相同 Qualifer。在本例中,并未显示定义具体的 Qualifier,则默认为 Default 类型,因为我们的计算器应用只包含一个 ExpressionEvaluator 接口的实现。如果有多个,则需要自定义 Qualifier 以确保唯一匹配。如 清单 7 所示:
更多精彩
赞助商链接