Google Guice return 每次都是新实例

Google Guice return new instance every time

我是依赖注入的新手,最近不得不学习 Spring 和 Guice。下面的问题可能很蹩脚。

Spring 允许您使用 @Scope("prototype") 注释创建原型对象,这意味着每次都会返回一个新对象

例如在我的 spring 容器中:-

@Scope("prototype")
@Bean
A getA(){
   return new A();
}

并且在@autowired的所有引用中注入了一个新的对象A。

class B {
  @Autowired
  A objA;
}

但是,在 guice 注入器中,正在注入相同的实例。看起来 guice 只提供单例、请求或会话范围 https://github.com/google/guice/wiki/Scopes。我的应用程序不完全是一个网络服务,我想知道如何在任何地方注入对象的新实例。我读到可以使用提供程序,但找不到任何 lame/easy 示例来理解。

如何将 A 的新实例注入 B 或任何其他 class?使用 Guice,目前我只能在 guice 容器

中注入所有 classes 的相同实例,如下所示
bind(A.Class).toInstance(new A());
new B(); // or create with other ways 

所需的行为是 guice 的默认行为,因此您每次都会获得一个新实例,除非您明确切换到单例。

这就是您绑定到实例时所做的事情。你在告诉 guice "eyery time someone needs a instance of A, give him this one (the one created via 'new'".

如果您只想在构建 B 时注入一个新的 A,请不要在模块中指定任何行为,只需让 A 有一个用 @Inject 注释的构造函数。

不使用绑定

默认绑定在每次注入时都会创建一个新实例。

您不需要申报任何东西:

import com.google.inject.*;

class Main {
  static class B {
    @Inject A a;
  }
  public static void main(String[] args) {
    Injector injector = Guice.createInjector();
    B b1 = injector.getInstance(B.class);
    B b2 = injector.getInstance(B.class);

    System.out.println(b1.a == b2.a); // Prints "false"
  }
}