0

是否可以使用基于注入点计算的构造函数/工厂参数执行自定义注入而不定义自定义注释?

给定一个代码:

class Foo {
  public Foo() {}
  public Foo(java.lang.reflect.Field field) {}
}

class Bar {
  @javax.inject.Inject Foo foo;
}

如何在不修改的情况下配置 guice 以使用Foo传递目标字段Bar)的第二个构造函数。

我知道 guice 可以使用标准 @Inject 对 java.util.logging.Logger 进行自定义注入,但这似乎是硬编码并使用内部 api。

4

2 回答 2

1

您可以使用注入提供程序来做到这一点。请参阅https://code.google.com/p/google-guice/wiki/ProviderBindingshttps://code.google.com/p/google-guice/wiki/ProvidesMethods。你只需要告诉 Guice 在绑定对象时如何实例化它。

例如在我的一个项目中,我尝试了这个:

public static class CalendarServiceProvider implements Provider<CalendarService> {
    @Inject
    GAppsOAuth oauth;
    private GCalendarService service;

    @Override
    public CalendarService get() {
        if (service == null) {
            service = new GCalendarService(oauth);
        }
        return service;
    }
}

不知道是不是你要找的,希望对你有帮助。

于 2013-08-06T09:16:10.307 回答
-1

如果只想使用特定的构造函数,可以使用构造函数绑定

bind(Foo.class).toConstructor(Foo.class.getConstructor(java.lang.reflect.Field.class));

如果您需要更复杂的东西,则必须使用自定义注入

于 2013-08-05T16:39:51.153 回答