【问题标题】:Guice - Inject dependency into a class with static helper methodsGuice - 使用静态辅助方法将依赖项注入到类中
【发布时间】:2013-08-26 23:44:21
【问题描述】:

我还是 Guice 的新手,之前没有使用过任何 DI 框架。在阅读了官方 wiki 和许多其他文档后,我仍然无法完全理解它。

在我的特殊情况下,我想编写一个使用其他(待注入)类的 EL taglib 函数。由于所有 taglib 函数都必须声明为静态,我不能只通过构造函数或设置器 @Inject 我的依赖项。我想过使用http://code.google.com/p/google-guice/wiki/Injections#Static_Injections 中描述的 requestStaticInjection() 方法,但我无法让它工作,也找不到任何好的教程。

提前感谢您的帮助,

阿曼

【问题讨论】:

  • “我无法让它工作”那你有什么尝试?

标签: java el guice static-methods taglib


【解决方案1】:

没有比 Guice 文档更清楚的了,但这里有一个单元测试,展示了如何使用静态注入的示例:

public class StaticInjectionExample {

  static class SomeClass {}

  static class TagLib{
    @Inject
    static SomeClass injected;

    public static void taglibFunction(String foo) {
      injected.something(foo);
    }

  }

  static class TestModule extends AbstractModule {
    @Override
    protected void configure() {
      requestStaticInjection(TabLib.class);
    }
  }

  @Test
  public void test() {
    Injector injector = Guice.createInjector(new TestModule());
    TagLib receiver = injector.getInstance(TagLib.class);
    // Do something with receiver.injected
  }
}

【讨论】:

  • 感谢您的回复。我给你试试。但是这会尊重其他注入器注入的任何依赖吗?例如,如果注入的类被标记为@Singleton,Guice 会使用相同的实例吗?
  • 我不确定您所说的“其他注射器”是什么意思。如果您将Injected 绑定为@Singleton,那么该单个实例将在整个模块的注入(包括静态注入)期间使用。
  • 根据 Guice 文档,您通常会在扩展 GuiceServletContextListener 的 ServletContextListener 内部的 Web 项目中创建一个 Injector。因此,如果我在某个类中创建一个额外的 Injector,Guice 会注入与“ServletContextListener-Injector”相同的@Singleton 类吗?
  • 我不确定您为什么需要创建额外的注入器。当您在GuiceServletContextListener 中配置注入器时,是否有某些原因不想安装该模块?
  • 我确实在GuiceServletContextListener 中配置了注入器。但是如何在静态方法中从另一个类访问注入器?我通过将GuiceServletContextListener 中的注入器声明为public static final 并以这种方式访问​​它来解决我的问题。但我认为这不是很好的风格:/
猜你喜欢
  • 1970-01-01
  • 2010-11-20
  • 1970-01-01
  • 2012-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多