使用 Guice 中的注释将一个 bean 注入另一个 bean
Inject one bean into another with annotations in Guice
我是 Guice 的新手,所以这可能是一个基本问题。使用 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);
}
}
但我想使用注释为 ClassA 和 ClassB 创建 bean。我在模块中尝试了以下代码:
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));
}
}
我也尝试了其他几种组合,但它们似乎都不起作用。有人可以告诉我吗
- 如何在Guice中使用注解创建ClassB的bean时将ClassA的bean作为构造函数参数注入?
AND/OR
- 如何将ClassA的bean设置为ClassB的class级变量(无构造器路由)?
你可以简单地写下:
@Provides @Singleton
public ClassB getClassB(ClassA classA) {
return new ClassB(classA);
}
通过将 ClassA
作为 getClassB
的参数传递,Guice 将认为 ClassB
依赖于 ClassA
,并且知道它必须调用 getClassA()
在调用 getClassB(ClassA)
.
之前
我是 Guice 的新手,所以这可能是一个基本问题。使用 Module
中的以下代码可以正确创建 Guice beanpublic 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);
}
}
但我想使用注释为 ClassA 和 ClassB 创建 bean。我在模块中尝试了以下代码:
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));
}
}
我也尝试了其他几种组合,但它们似乎都不起作用。有人可以告诉我吗
- 如何在Guice中使用注解创建ClassB的bean时将ClassA的bean作为构造函数参数注入?
AND/OR
- 如何将ClassA的bean设置为ClassB的class级变量(无构造器路由)?
你可以简单地写下:
@Provides @Singleton
public ClassB getClassB(ClassA classA) {
return new ClassB(classA);
}
通过将 ClassA
作为 getClassB
的参数传递,Guice 将认为 ClassB
依赖于 ClassA
,并且知道它必须调用 getClassA()
在调用 getClassB(ClassA)
.