当前位置: 首页 > 知识库问答 >
问题:

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

卢文博
2023-03-14

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

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个答案

顾泰平
2023-03-14

替换FactoryProvider的是FactoryModuleBuilder。它将返回一个模块给install,但在您的模块中,您可以调用GetProvider为您的类型获取一个有效的注入器创建提供程序。

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

install(new FactoryModuleBuilder().build(WindowedCounterFactory.class));
bindInterceptor(Matchers.any(), Matchers.annotatedWith(RateLimited.class),
    new RateLimitingInterceptor(getProvider(WindowedCounterFactory.class)));
 类似资料:
  • 我很困惑绑定如何与Guice一起工作。我是一家公司的初级开发人员,我正在查看我们的代码库,试图了解我们是如何在应用程序中实现Guice的。 我正在阅读关于Guice注入的指南:https://www.tutorialspoint.com/guice/guice_first_application.htm,这看起来和我们公司的做法不一样。 第一步说创建接口。我们确实在模块类中有一个扩展的绑定。 例:

  • 我已经使用google-guice和辅助注射机制有一段时间了。因为我在scala,刚刚发现scala-guice,我也对使用它感兴趣。但是我对如何使用辅助注射感到困惑。没有使用辅助注射的例子。 因此,我的问题是:是否可以使用scala guice辅助注射,如果可以,请提供一个简单的例子? 此外,对于google-guice,我使用以下库:javax.inject.jar、guice-3.0.jar

  • 我正在使用Guice Assisted Inject库为我建立一个工厂。我目前的设置如下: 这迫使我使用< code > factory . create controller(first,factory . create second(first))显式创建一个< code>SecondDep。是否可以更改我的绑定,这样我就可以简单地执行< code > factory . create con

  • 我在实施辅助注射时遇到了错误。 辅助注射一直有效,直到我引入了另一个名为管理器的类,它依赖于辅助类。经理想要使用代码在构建喷油器图时中断。它没有更进一步。 直觉上,我理解当对象A得到帮助时,那么B(依赖于A)实际上也通过A得到了隐含的帮助。 请注意,我检查过了。我想像ColinD这样的人肯定知道答案如何使用Guice的AssistedInject?如何将辅助注入类绑定到接口? 出于好奇,有没有好的

  • 问题内容: 我正在使用Java EE 6和Jboss AS7.1,并尝试使用拦截器绑定(来自jboss网站的示例)。 我有一个InterceptorBinding注解: 拦截器: 还有一个豆: 但是拦截器没有被称为。。。 在编写此代码时将调用拦截器: 谢谢你的帮助。 问题答案: 您是否按照参考示例中的说明启用了拦截器? 缺省情况下,bean档案没有通过拦截器绑定绑定的已启用拦截器。必须通过将侦听器

  • 我想创建一个动态绑定实例到命名注释的模块。用例是我想自动绑定配置中的值,属性文件中的键是@命名值。 然而,配置绑定在不同的模块中,所以我需要注入配置。我看过的解决方案是: > 绑定在confiure()方法中。这个方法没有注入,我不能得到基本配置。 使用提供程序/@提供程序。提供程序只绑定一个实例。 使用多活页夹。我的用例与这个扩展提供的有点不同。多重绑定允许您单独绑定多个实例,然后将它们作为包含