【问题标题】:guice ignores providers?guice 忽略提供者?
【发布时间】:2012-07-30 12:32:48
【问题描述】:

Guice 似乎忽略了我模块的 @Provider 方法。

我有一个这样的 MyModule 类:

public class MyModule extends AbstractModule {

    protected void configure() {

        bindInterceptor(Matchers.any(), Matchers.annotatedWith(Timed.class), new GuiceEnabledLoggingInterceptor());
        bind(OneClass.class).to(OneClassImpl.class);

        // And more binding lines...

    }

    @Provides
    public AnotherClassInApi provideMyClass() {
        return AnotherClassInApi.getInstance();
    }

    // And more @Provides methods

}

主要方法是

public static void main(String[] args){
    ConfigHandler.getInstance().loadConfigWhenNotRunningInsideMicrocontainer();
    Injector INJECTOR = Guice.createInjector(new MyModule());
    // ...
}

在项目的其他部分,我有类 AnotherClassInApi,这是一个非常标准的单例加一个方法:

public class AnotherClassInApi {

    private static final AnotherClassInApi INSTANCE = new AnotherClassInApi();

    private AnotherClassInApi() { }

    // ... more methods

    public static AnotherClassInApi getInstance() {
        return INSTANCE;
    }
}

嗯,我知道应该有效地将AnotherClassInApi 对象的任何请求绑定到getInstance() 方法,但它不起作用。有趣的是,调试时从未到达@Provide 方法中的断点,但到达了configure 方法中的断点。似乎 guice 忽略了我的提供者注释,我认为 I'm following exactly what Guice guide says about @Provider,所以我已经卡住了。

我一直在谷歌搜索,但找不到类似的东西。任何帮助将不胜感激。

谢谢!

【问题讨论】:

  • 在您请求AnotherClassInApi 实例的地方,您的实际@Inject 点是什么样的?

标签: annotations guice provider


【解决方案1】:

提供者(和@Provides 方法)的概念是,它们仅在实际需要时被调用。因此,除非您真的使用 Injector 创建具有 @Inject 依赖项的实例,否则您的 Provider 不会被忽略,只是不会被使用(也不需要)。

您可以使用“injector.getAllBindings()”监控所有配置的绑定。

java.util.Map,Binding> getAllBindings()

返回快照 这个注入器的绑定,显式的和即时的。这 返回的地图是不可变的;它只包含以前的绑定 调用 getAllBindings() 时出现。即时绑定是 仅在至少被要求一次时才出现。随后的 调用可能会返回一个带有额外即时绑定的地图。这 返回的映射不包括从父级继承的绑定 注射器,应该存在吗?

此方法是 Guice SPI 的一部分,旨在供工具使用 和扩展。

【讨论】:

  • 此链接现已断开。
猜你喜欢
  • 1970-01-01
  • 2015-12-05
  • 2015-03-27
  • 1970-01-01
  • 2016-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
相关资源
最近更新 更多