透過辨識標註進行注入

透過辨識標註注入在多重注入實例中的指定實例。

辨識標註有兩種,第一個是命名標註 @Named , 第二個是自定義標註。

命名標註

在 Map 中使用命名標註

我們以上一頁的註冊為例:

@ELDPlugin(
        registry = TesterRegistry.class,
        lifeCycle = TesterLifeCycle.class
)
public class ELDTester extends ELDBukkitPlugin {

    @Override
    protected void bindServices(ServiceCollection serviceCollection) {
        serviceCollection.addServices(MyService.class, Map.of(
                "A", MyServiceA.class,
                "B", MyServiceB.class
        ));
    }

    @Override
    protected void manageProvider(ManagerProvider provider) {

    }
}

除了透過注入 Map 外,我們可以透過 @Named(key) 來獲取指定的實例。

在 Set 中使用命名標註

因為 Set 在註冊的時候沒有 key, 所以我們必須在定義實例的 class 的時候進行標註。

獲取方式與 上述 Map 的例子 相同。

自定義標註

自定義標註只能用於 Set 註冊。首先,為每個特定實例創建一個標註(Annotation)且該標註需要標註(Annotate) @Qualifier

然後,跟 @Named 一樣在 實例的 class 上標註:

獲取方式則如下:

最后更新于