Dependency injection GoogleGuice每次都返回新实例
我是依赖注入的新手,最近不得不学习Spring和Guice。下面的问题可能很蹩脚 Spring允许您创建带有@Scope(“prototype”)注释的原型对象,这意味着每次都会返回一个新对象 例如,在我的spring容器中:-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
@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"
}
}