在Guice中为依赖注入绑定相同类型两次(例如包装器)的最佳方法是什么?

时间:2016-07-14 12:38:35

标签: java dependency-injection guice

假设我的服务类型QTableWidget包含许多不同的实施,QHeaderViewService。我还有一个缓存层ServiceImplX,它实现ServiceImplY并包含CachedService的一些基本实现来访问数据。

我想要的是能够绑定ServiceService中的一个作为要注入ServiceImplX的基本实现,而ServiceImplY本身应绑定到CachedService CachedService将注入此服务的实际客户。

我想避免命名注释来解决这个问题,因为这似乎很脆弱。有没有更安全的方法来实现这个目标?

1 个答案:

答案 0 :(得分:1)

定义正确的绑定注释:

@RetentionPolicy(RUNTIME)
@BindingAnnotation
@interface ServiceBinding {}

这比@Named绑定注释更强大,因为:

  • 它是一个符号,就像类名或变量一样,因此您可以在代码中轻松找到对它的引用; @Named注释中的名称可以在运行时构建,因此更难找到。
  • 您可以通过public / private等修饰符来控制绑定注释的可访问性,这样您就可以控制注释的配置和引用位置。 @Named注释的字符串在全局范围内。