如何将非Guice实例注入Guice模块

时间:2019-08-15 22:28:02

标签: guice

我希望能够在外部(例如在Spring中)定义一个简单的Config bean,并将其注入到Guice模块中。

有什么办法可以做到这一点?

public class InjectionTest {

    @Test
    public void test() {
        // In reality this would be externally defined
        Config config = new Config("a", "b");

        AbstractModule module = new AbstractModule() {
            @Override
            protected void configure() {
                bind(Config.class).toInstance(config);
            }
        };

        Injector injector = Guice.createInjector(module);
        Thing instance = injector.getInstance(Thing.class);
    }

    static class Thing {
        final Config config;

        public Thing(Config config) {
            this.config = config;
        }
    }

    static class Config {
        final String a, b;

        public Config(String a, String b) {
            this.a = a;
            this.b = b;
        }
    }
}

测试失败:

  

com.google.inject.ConfigurationException:Guice配置错误:

     

1)在guice.InjectionTest $ Thing中找不到合适的构造函数。 >类必须具有一个(只有一个)以@Inject注释的构造函数或非私有的零参数构造函数。     在guice.InjectionTest $ Thing.class(来源不明)     定位guice.InjectionTest $ Thing

时      

1个错误

1 个答案:

答案 0 :(得分:5)

您在错误消息中有一个答案。

  

类必须具有一个(且只有一个)构造函数,并带有注释   @Inject或非私有的零参数构造函数。

@Inject构造函数添加Thing注释

@Inject
public Thing(Config config) {
  this.config = config;
}