我们如何绑定需要在guice中辅助注射的方法拦截器?

时间:2012-11-16 06:42:55

标签: guice guice-3

我有一个使用辅助注射创建的类(WindowedCounter)。我需要将这个类的工厂注入方法拦截器。现在,方法拦截器只能绑定到具体实例。所以我的问题是如何巧妙地做到这一点。

以下代码是我到目前为止所提出的。我为工厂创建了一个Factory Provider,并使用它来获取模块本身的工厂实例。然后绑定到该类并用于获取绑定到拦截器的实例。但是,从Guice 3.0开始,FactoryProvider类已折旧。

Guice 3.0的做法是什么?

我可以在模块中注入实例吗?

Provider<WindowedCounterFactory> wCountFactoryProvider = FactoryProvider.newFactory(WindowedCounterFactory.class, WindowedCounter.class);

bind(WindowedCounterFactory.class).toProvider(wCountFactoryProvider);

WindowedCounterFactory wCountFactory = wCountFactoryProvider.get();

bindInterceptor(Matchers.any(), Matchers.annotatedWith(RateLimited.class), new RateLimitingInterceptor(wCountFactory));

1 个答案:

答案 0 :(得分:1)

FactoryProvider的替换为FactoryModuleBuilder。它会将模块返回到install,但在您的模块中,您可以调用getProvider为您的类型获取有效的注射器创建提供程序。

理论上,在创建Injector之前,您不应该访问您的类型(例如,某些依赖项可能绑定在其他模块中);这可能要求您重构在MethodInterceptor中使用Provider,或者在child injector中安装拦截器,这样您就可以从“父”注入器获取Factory的实例。

install(new FactoryModuleBuilder().build(WindowedCounterFactory.class));
bindInterceptor(Matchers.any(), Matchers.annotatedWith(RateLimited.class),
    new RateLimitingInterceptor(getProvider(WindowedCounterFactory.class)));