简体   繁体   English

在Guice中使用注解将一个bean注入另一个bean

[英]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 有人可以让我知道吗

  1. How to inject bean of ClassA as constructor parameter while creating bean of ClassB using annotations in Guice? 在Guice中使用注释创建ClassB的bean时,如何将ClassA的bean作为构造函数参数注入?

AND/OR 与/或

  1. How to set bean of ClassA as class level variable of ClassB(without constructor route)? 如何将ClassA的bean设置为ClassB的类级别变量(不带构造函数路由)?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM