Binding Annotations
偶尔你会想要一个相同类型的多个绑定。例如,您可能需要一个PayPal信用卡处理器和Google Checkout处理器。要启用此功能,需要添加一个可选绑定的注释。注解和类型一起唯一标识绑定。这一对叫做“键”(key)。
定义绑定注解需要两行代码加上几个导入。 将其放在自己的.java文件或其注释的类型中。
1 | package example.pizza; |
您不需要了解所有这些元注释,但如果您好奇:
- @BindingAnnotation告诉Guice这是一个绑定注解。 如果多个绑定注释适用于同一个成员,Guice将会产生错误。
- @Target({FIELD,PARAMETER,METHOD})是向使用者说明其作用域。 它可以防止@PayPal意外地被应用到不起作用的地方。
- @Retention(RUNTIME)表明注释在运行期间起作用。
要依赖注解的绑定,请将注解应用于注入的参数:
1 | public class RealBillingService implements BillingService { |
最后,我们创建一个使用注释的绑定,在bind()语句中使用可选的annotatedWith子句:
1 | bind(CreditCardProcessor.class) |
@Named
Guice带有一个内置的绑定注释@Named,它需要传入一个字符串值:
1 | public class RealBillingService implements BillingService { |
由于编译器无法检查字符串,我们建议少用@Named注解。 定义您自己的专用注解提供了更好的类型安全性。
Binding Annotations with Attributes
Guice支持具有属性值的绑定注解(如@Named)。在极少数情况下,您需要这样的注解(并且不能使用@Provides方法),我们建议您从Auto / Value项目中使用@AutoAnnotation,因为正确实现注解是容易出错的。如果您决定手动创建自定义实现,请务必正确实现Javadoc中详细说明的equals()和hashCode()规范 Annotation Javadoc。将此类的实例传递给annotatedWith()绑定子句。