我认为自定义绑定注释@Foo在功能上与@Named(“foo”)相同。这不是真的吗?
我在单独的GuiceModules中有两件提供相同项目类型的东西:
In GuiceModuleFoo
@Foo
@Provides
public String provideFoo() { return "foo"; }
In GuiceModuleBar
@Bar
@Provides
public String provideBar() { return "bar"; }
class MyOtherThing extends Thing {
@Inject
public MyOtherThing(@Foo String s) {
super(s);
}
}
此外,如果它很重要,我正在使用Modules.override,以便GuiceModuleBar重写GuiceModuleFoo(用于不相关的提供)。
尽管MyOtherThing没有注入@Foo提供的值。它从@Bar提供商那里获得了价值。当我添加第三个提供者@Baz时,它实际上似乎有点随机。
但是,当将所有内容转换为使用@Named(例如@Named(“foo”))时,它的工作方式完全符合要求!
所以...我是否误解了注释的工作原理?自定义注释看起来像这样:
@BindingAnnotation
@Target({ FIELD, PARAMETER, METHOD }) @Retention(RUNTIME)
public @interface Foo {
}