2

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

下面的代码是我到目前为止想出的。我为工厂创建了一个工厂提供程序,并使用它在模块本身中获取工厂实例。然后将其绑定到两个类并用于获取绑定到拦截器的实例。但是,从 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));
4

1 回答 1

1

FactoryProvider 的替代品是FactoryModuleBuilder。相反,它将返回一个 Module install,但是在您的 Module 中,您可以调用getProvider以获取适用于您的类型的有效注入器创建提供程序。

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

install(new FactoryModuleBuilder().build(WindowedCounterFactory.class));
bindInterceptor(Matchers.any(), Matchers.annotatedWith(RateLimited.class),
    new RateLimitingInterceptor(getProvider(WindowedCounterFactory.class)));
于 2012-11-16T14:17:45.863 回答