簡體   English   中英

使用標准注釋自定義注入

[英]Custom injection with standard annotations

是否可以使用基於注入點而無需定義自定義注釋而計算出的構造函數/工廠參數來執行自定義注入?

給定一個代碼:

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。

您可以使用注入提供程序來執行此操作。 請參閱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;
    }
}

我不知道這是否是您要的東西,但希望對您有所幫助。

如果只想使用特定的構造函數,則可以使用構造函數綁定

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

如果您需要更復雜的東西,則必須使用自定義注入

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM