我可以创建一个提供程序,每次调用get时都会返回一个新对象

时间:2012-03-27 12:30:21

标签: java guice provider

我希望在课堂上有一个提供者成员,当'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()

2 个答案:

答案 0 :(得分:10)

虽然@ GuillaumePolet的解决方案可行,但它并不是首选的方法。绑定MyClass是正确的,但您不应为此注入Injector(您应该避免一般注入Injector

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

@Inject
Provider<MyClass> provider;

...
return provider.get();

答案 1 :(得分:1)

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

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

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

@Inject
Injector injector;

...
return injector.newInstance(MyClass.class);

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

bind(MyClass.class);

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