I am new to Guice so this might be a basic question. Guice beans get created correctly with below code in Module
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. 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)
.