簡體   English   中英

CDI:從外部庫向bean注入資源

[英]CDI: Injecting resources to beans from external libraries

在Spring中,我們具有基於注釋和基於XML的配置。 雖然推薦使用第一種,以便快速開發,但是第二種更靈活,並且能夠處理特殊情況。 目前,我們有2個:為JUnit測試注入模擬並從外部庫配置Bean。

我還沒有找到CDI的XML配置的等效項,所以我的問題是,如何處理此類bean的依賴項注入? 它們來自外部庫,需要進行配置,並且無法向其中添加任何注釋。

您可以根據需要提供三種解決方案:

使用生產者

CDI提供了一種在bean中轉換非CDI類的方法。 它被稱為生產者。 如果要從名為NonCdiClass的類創建Bean,則只需創建類似的內容

public class MyProducers {
    @Produces
    public NonCdiClass produceNonCdiClass() {
        return new NonCdiClass();
        };
    }
  }

現在,您可以在需要時@Inject此bean。

您可以在類中添加任意數量的生產者方法。

如果您需要在生產的bean中模擬注入,則可以使用CDI在生產者方法調用中注入參數來實現。

@Produces
public NonCdiClass produceNonCdiClass(MyFisrtBean param1, MySecondBean param2) {
    NonCdiClass res = new NonCdiClass(param1);
    res.setParam(param2);
    return res;
    };
}

在此示例中, MyFirstBeanMySecondBean是現有的bean類,將在生產時由CDI注入。

生產者還可以具有限定符(在其上或在其參數上)或注入InjectionPoint ,后者是CDI內部bean,可讓您根據注入的位置和注解的不同來生產bean。

Weld參考文檔中,您有一個不錯的InjectionPoint示例。

開發擴展

由於不知道您是否需要它,因此在此不做詳細介紹,但是您可以在AfterBeanValidation階段的擴展中注冊bean。 這些注冊的bean可以是您想要的任何類。 如果您需要更多信息,我可以在這里進行開發。

使用焊縫(舊版)或等待Deltaspike 0.6

Solder集成了一個配置模塊,但是由於該項目已經在Apache Deltaspike中進行合並,因此不再維護該項目。 這次合並在Deltaspike路線圖的0.6版中: http ://issues.apache.org/jira/browse/DELTASPIKE-271。 因此,您可以開始使用Solder config並在它具有功能時切換到Deltaspike(應該非常接近)。 這個解決方案不是我的最愛,但是如果您真的想在Spring中使用配置文件,那是最接近的解決方案

Pure CDI提供了@Alternative批注,以便在測試階段通過beans.xml注入例如模擬對象,但是許多模擬庫由於為它們而設計,因此效果更好。

我不知道使用beans.xml在耳朵/戰爭本身之外注入任何東西的方法。

暫無
暫無

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

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