使用 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));
    }
}

我也尝试了其他几种组合,但它们似乎都不起作用。有人可以告诉我吗

  1. 如何在Guice中使用注解创建ClassB的bean时将ClassA的bean作为构造函数参数注入?

AND/OR

  1. 如何将ClassA的bean设置为ClassB的class级变量(无构造器路由)?

你可以简单地写下:

@Provides @Singleton
public ClassB getClassB(ClassA classA) {
  return new ClassB(classA);
}

通过将 ClassA 作为 getClassB 的参数传递,Guice 将认为 ClassB 依赖于 ClassA,并且知道它必须调用 getClassA()在调用 getClassB(ClassA).

之前