Guice:使用属性绑定注释
现在我正在阅读Guice的官方文档,但我有一些与Binding Annotation章节相关的问题。
这解释了“带属性的注释”。 但是,我不确定解释。
绑定注释与属性
Guice支持绑定具有属性值的注释。 在极少数情况下,您需要这样的注释:
创建注释@interface。 创建一个实现注释接口的类。 遵循Annotation Javadoc中指定的equals()和hashCode()指南。 将此实例传递给annotatedWith()绑定子句。
我不明白这个解释。 有什么解释意图? 我学习了两个注释,例如@Paypal(在本文档中)和@name。 但是,如果我想在同一个类中使用两个以上的依赖项,那么我们只能用这两个注释来实现? 现在我很困惑,有人可以解释一下吗?
Guice通过使用Key
来确定要注入的内容, Key
只是绑定注释 (本身用@BindingAnnotation
或@Qualifier
注释的注释)和类型 (如果需要带参数)的组合的名称。 这些都是有效的密钥,彼此不同:
-
YourClassOne
-
YourClassTwo
-
List
-
List
-
@Paypal YourClassOne
-
@Paypal YourClassTwo
-
@YourBindingAnnotation YourClassOne
-
@YourBindingAnnotation List
但是,注释允许具有属性,例如@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的AutoAnnotation这样的代码生成器。)
- 使用servicelocation而不是构造函数注入来避免编写工厂类的负载是不好的
- 如何以静态方法以编程方式将Java CDI托管bean注入局部变量
- Glassfish 4,CDI中的简单示例因WELD-001408不满意的依赖性而失败
- 导入org.springframework无法解析
- Spring 3.0dependency injection的最小JAR
- 使用自定义参数注入变量而不创建2个guice helper接口?
- 如何解决松散耦合/dependency injection与富域模型之间的冲突?
- Springdependency injection自动assembly空
- 在静态方法中使用注入bean的正确方法是什么?