现在我正在阅读Guice的官方文档,但我有一些与Binding Annotation章节相关的问题。
This解释"带属性的注释"。但是,我不确定解释。
使用属性绑定注释
Guice支持绑定具有属性值的注释。在里面 极少数情况下你需要这样的注释:
创建注释@interface。创建一个实现的类 注释界面。遵循equals()和指南 注释Javadoc中指定的hashCode()。传递一个实例 这是annotatedWith()绑定子句。
我不理解这个解释。有什么解释意图?我学习了两个注释,例如@Paypal(在本文档中)和@name。但是,当我想在同一个类中使用两个以上的依赖项时,我们可能无法实现这两个注释? 现在我很困惑,有人可以解释一下吗?
答案 0 :(得分:5)
Guice使用Key
计算出你要注入的内容,@BindingAnnotation
只是 a binding annotation 组合的名称(注释本身用{{3注释) }}或@Qualifier
)和类型(如果需要,带参数)。这些都是有效的密钥,彼此不同:
YourClassOne
YourClassTwo
List<Integer>
List<String>
@Paypal YourClassOne
@Paypal YourClassTwo
@YourBindingAnnotation YourClassOne
@YourBindingAnnotation List<String>
但是,注释允许具有属性,例如@Named("your name here")
。这意味着键不仅与您具有哪种绑定注释有所不同,而且与其属性有关。让我们使用带有属性的注释添加一些键到上面的列表中:
@Named("foo") YourClassOne
@Named("bar") YourClassOne
@AnotherBindingAnnotation(foo=3, bar=5) YourClassOne
@AnotherBindingAnnotation(foo=6, bar=1) YourClassOne
他们彼此之间各不相同,而且他们所有有效的东西都可以提供给Guice并从Guice注入。
通常,您可能不需要使用属性创建自己的绑定注释:绑定注释首先并不常见,大多数情况下您可能需要它们使用空(无属性)绑定注释或使用内置@Named
注释(及其对应的Names.named
)来处理,这有助于您创建注释的兼容实例你可以在你的AbstractModule中使用它。但是,如果您想要使用属性创建自己的绑定注释,则可以使用您引用的文档部分来创建它,特别是符合Annotation.equals和Annotation.hashCode要求。 (如果这是您希望做的事情,请考虑使用像Apache Commons AnnotationUtils这样的库或像Google Auto's AutoAnnotation这样的代码生成器。)