Dependency injection GoogleGuice每次都返回新实例

Dependency injection GoogleGuice每次都返回新实例,dependency-injection,guice,Dependency Injection,Guice,我是依赖注入的新手,最近不得不学习Spring和Guice。下面的问题可能很蹩脚 Spring允许您创建带有@Scope(“prototype”)注释的原型对象,这意味着每次都会返回一个新对象 例如,在我的spring容器中:- @Scope("prototype") @Bean A getA(){ return new A(); } 在@autowired的所有引用中注入一个新对象a class B { @Autowired A objA; } 但是,在guice injec

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

Spring允许您创建带有@Scope(“prototype”)注释的原型对象,这意味着每次都会返回一个新对象

例如,在我的spring容器中:-

@Scope("prototype")
@Bean
A getA(){
   return new A();
}
在@autowired的所有引用中注入一个新对象a

class B {
  @Autowired
  A objA;
}
但是,在guice injector中,正在注入相同的实例。看起来guice只提供单例、请求或会话作用域。我的应用程序并不完全是一个web服务,我想知道如何在任何地方注入对象的新实例。我读过提供程序可以使用,但找不到任何蹩脚/容易理解的示例

如何将A的新实例注入B或任何其他类?有了Guice,目前我只能在Guice容器中为所有类注入相同的实例,如下所示

bind(A.Class).toInstance(new A());
new B(); // or create with other ways 

所需的行为是guice的默认行为,因此每次都会得到一个新实例,除非显式切换到singleton

这就是你在坚持的时候所做的。你告诉guice“每当有人需要一个实例时,给他这个(通过“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"
  }
}