用Guice写Java - 编程入门网
性值的标注实例,它会去 找一个绑定到该标注类型的绑定。
例如,我们有一个绑定标注 @Named,它有一个字符串属性值。 @Retention(RUNTIME) @Target({ FIELD, PARAMETER }) @BindingAnnotation public @interface Named { String value(); } 用Guice写Java(7)时间:2011-04-02 王咏刚如果我们希望绑定到 @Named("Bob"),我们首先需要一个 Named 的实现。我们的实现 必须遵守关于 Annotation 的约定,特别是 hashCode() 和 equals() 的实现。 class NamedAnnotation implements Named { final String value; public NamedAnnotation(String value) { this.value = value; } public String value() { return this.value; } public int hashCode() { // This is specified in java.lang.Annotation. return 127 * "value".hashCode() ^ value.hashCode(); } public boolean equals(Object o) { if (!(o instanceof Named)) return false; Named other = (Named) o; return value.equals(other.value()); } public String toString() { return "@" + Named.class.getName() + "(value=" + value + ")"; } public Class<? extends Annotation> annotationType() { return Named.class; } } 现在我们可以使用这个标注实现来创建一个指向 @Named 的绑定。 bind(Person.class) .annotatedWith(new NamedAnnotation("Bob")) .to(Bob.class); 与其它框架使用基于字符串的标识符相比,这显得有些繁琐,但记住,使用基于字符 串的标识符,你根本无法这样做。而且,你会发现你可以大量复用已有的绑定标注。 因为通过名字标记一个绑定非常普遍,以至于 Guice 在 com.google.inject.name 中 提供了一个十分有用的 @Named 的实现。 用Guice写Java(8)时间:2011-04-02 王咏刚隐式绑定 正如我们在简介中看到的那样,你并不总是需要显式地声明绑定。如果缺少显式绑定 ,Guice 会试图注入并创建一个你所依赖的类的新实例。如果你依赖于一个接口,Guice 会寻找一个指向具体实现的 @ImplementedBy 标注。例如,下例中的代码显式绑定到一个 具体的、可注入的名为 Concrete 的类。它的含义是,将 Concrete 绑定到 Concrete。 这是显式的声明方式,但也有些冗余。 bind(Concrete.class); 删除上述绑定语句不会影响下面这个类的行为:
好吧,你自己来选择:显式的或简略的。无论何种方式,Guice 在遇到错误时都会生 成有用的信息。 注入提供者 有时对于每次注入,客户代码需要某个依赖的多个实例。其它时候,客户可能不想在 一开始就真地获取对象,而是等到注入后的某个时候再获取。对于任意绑定类型 T,你可 以不直接注入 T 的实例,而是注入一个 Provider<T>,然后在需要的时候调用 Provider<T>.get(),例如:
正如你所看到的那样, Provider 接口简单得不能再简单了,它不会为简单的单元测 试添加任何麻烦。 注入常数值 对于常数值,Guice 对以下几种类型做了特殊处理: 基本类型(int, char, ...) 基本封装类型(Integer, Character, ...) Strings Enums Classes 首先,当绑定到这些类型的常数值的时候,你不需要指定你要绑定到的类型。Guice 可以根据值判断类型。例如,一个绑定标注名为 TheAnswer: bindConstant().annotatedWith(TheAnswer.class).to(42); |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |