Google Guice 每次都返回新实例

use*_*336 2 dependency-injection guice

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

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

例如在我的弹簧容器中:-

@Scope("prototype")
@Bean
A getA(){
   return new A();
}
Run Code Online (Sandbox Code Playgroud)

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

class B {
  @Autowired
  A objA;
}
Run Code Online (Sandbox Code Playgroud)

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

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

bind(A.Class).toInstance(new A());
new B(); // or create with other ways 
Run Code Online (Sandbox Code Playgroud)

Jan*_*ski 5

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

这就是您绑定到Instance 时所做的。你告诉 guice “有人需要 A 的实例的时候,给他这个(通过 'new' 创建的那个”。

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