繁体   English   中英

Guice:具有属性的绑定注释

[英]Guice:Binding Annotations with Attributes

现在,我正在阅读Guice的官方文档,但是我对绑定注释这一章有一些疑问。

解释了“带有属性的注释”。 但是,我不确定这个解释。

具有属性的绑定注释

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

创建注释@interface。 创建一个实现注释接口的类。 遵循在注释Javadoc中指定的equals()和hashCode()的准则。 将此实例传递给annotatedWith()绑定子句。

我不明白那个解释。 解释的目的是什么? 我学会了两个注释,例如@Paypal(在本文档中)和@name。 但是,当我想对同一个类使用两个以上的依赖时,也许我们不能仅用这两个注释实现? 现在我很困惑,有人可以解释吗?

Guice通过使用Key来弄清楚要注入的内容, Key只是绑定注释 (本身用@BindingAnnotation@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.equalsAnnotation.hashCode要求的情况下。 (如果您希望做很多事情,请考虑使用诸如Apache Commons AnnotationUtils之类的库或诸如Google Auto的AutoAnnotation之类的代码生成器。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM