【问题标题】:Inject one bean into another with annotations in Guice在 Guice 中使用注释将一个 bean 注入另一个
【发布时间】:2019-09-01 08:23:05
【问题描述】:

我是 Guice 的新手,所以这可能是一个基本问题。使用以下模块中的代码正确创建 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 作为构造函数参数注入?

与/或

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

【问题讨论】:

    标签: java guice


    【解决方案1】:

    你可以简单地写下:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 2011-12-28
      • 1970-01-01
      • 2014-01-24
      • 1970-01-01
      • 2017-06-18
      • 1970-01-01
      相关资源
      最近更新 更多