[英]Inject one bean into another with annotations in Guice
I am new to Guice so this might be a basic question. 我是Guice的新手,所以这可能是一个基本问题。 Guice beans get created correctly with below code in Module
使用模块中的以下代码正确创建Guice bean
public class MyModule extends AbstractModule {
@Override
protected void configure() {
ClassA classAObj = ClassA.standard().build();
bind(ClassA.class).toInstance(classAObj);
ClassB classBObj = new ClassB(classAObj);
bind(ClassA.class).toInstance(classBObj);
}
}
but I want to create beans for ClassA and ClassB using annotations. 但是我想使用注释为ClassA和ClassB创建bean。 I tried below code in Module:
我在模块中尝试了以下代码:
public class MyModule extends AbstractModule {
@Provides @Singleton public ClassA getClassA() {
return ClassA.standard().build();
}
@Provides @Singleton public ClassB getClassB() {
Injector injector = Guice.createInjector(new MyModule());
return new ClassB(injector.getInstance(ClassA.class));
}
}
I also tried few other combinations but they don't seem to be working. 我还尝试了其他几种组合,但它们似乎没有用。 Can someone please let me know
有人可以让我知道吗
AND/OR 与/或
You can simply write the following: 您可以简单地编写以下内容:
@Provides @Singleton
public ClassB getClassB(ClassA classA) {
return new ClassB(classA);
}
By passing ClassA
as parameter of getClassB
, Guice will consider that ClassB
depends on ClassA
, and will know that it must call getClassA()
before calling getClassB(ClassA)
. 通过传递
ClassA
作为参数getClassB
,吉斯将考虑ClassB
依赖于ClassA
,并会知道,它必须调用getClassA()
调用之前getClassB(ClassA)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.