【问题标题】:can I create a provider that will return a new object each time get is called我可以创建一个提供程序,每次调用 get 时都会返回一个新对象
【发布时间】:2012-03-27 12:30:20
【问题描述】:

我想在课堂上有一个提供者成员,当“get”被调用时,每次都会给我一个新对象。我该怎么做?

public class GuiceInjectionTest
{
  @Inject
  Provider<MyClass> provider;

  public Provider<MyClass> get()
  {
    //I want a new instance every time here that is injected by guice
    return provider.get() 
  }
}

注意我希望这个新实例由 Guice 注入,所以我不能只在提供程序实现中创建 new MyClass()

【问题讨论】:

    标签: java guice provider


    【解决方案1】:

    虽然@GuillaumePolet 的解决方案可行,但它并不是执行此操作的首选方式。绑定MyClass 是正确的,但您不应该为此注入Injector(通常应避免注入Injector)。

    对于您可以注入的任何类型,Guice 可以自动注入该类型的Provider。所以你应该做的是:

    @Inject
    Provider<MyClass> provider;
    
    ...
    return provider.get();
    

    【讨论】:

      【解决方案2】:

      您可以使用以下代码绑定您的提供程序:

      bind(MyClass.class).toProvider(MyClassProvider.class);
      

      在您的提供程序中,您可以注入 Injector 并请求一个新实例 MyClass.class

      @Inject
      Injector injector;
      
      ...
      return injector.newInstance(MyClass.class);
      

      但你也可以简单地绑定你的类:

      bind(MyClass.class);
      

      获得相同的结果(不完全一样,取决于您使用提供商的方式)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-30
        • 1970-01-01
        • 1970-01-01
        • 2014-04-25
        • 1970-01-01
        • 1970-01-01
        • 2014-09-02
        • 1970-01-01
        相关资源
        最近更新 更多