Guice:使用属性绑定注释

时间:2017-01-31 13:02:49

标签: java dependency-injection annotations guice

现在我正在阅读Guice的官方文档,但我有一些与Binding Annotation章节相关的问题。

This解释"带属性的注释"。但是,我不确定解释。

  

使用属性绑定注释

     

Guice支持绑定具有属性值的注释。在里面   极少数情况下你需要这样的注释:

     

创建注释@interface。创建一个实现的类   注释界面。遵循equals()和指南   注释Javadoc中指定的hashCode()。传递一个实例   这是annotatedWith()绑定子句。

我不理解这个解释。有什么解释意图?我学习了两个注释,例如@Paypal(在本文档中)和@name。但是,当我想在同一个类中使用两个以上的依赖项时,我们可能无法实现这两个注释? 现在我很困惑,有人可以解释一下吗?

1 个答案:

答案 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)来处理,这有助于您创建注释的兼容实例Annotation.equals和Annotation.hashCode要求。 (如果这是您希望做的事情,请考虑使用像Apache Commons AnnotationUtils这样的库或像Google Auto's AutoAnnotation这样的代码生成器。)