Guice自定义绑定注释失败,但@Named有效吗?

时间:2016-03-29 21:57:36

标签: java guice

我认为自定义绑定注释@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 {
}

0 个答案:

没有答案