Guice:使用属性绑定注释

Kaz*_*ita 2 java annotations dependency-injection guice

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

解释了"带属性的注释".但是,我不确定这个解释.

绑定注释与属性

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

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

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

Jef*_*ica 5

Guice通过使用a来计算你想要注入的内容Key,这只是绑定注释(本身用@BindingAnnotationor 注释的注释@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这样的代码生成器.)