2016-09-06 27 views
0

我對項目設置有點好奇。CDI在罐子間注入混凝土依賴關係

我有一個項目,我試圖更新。

因此,我用@Named(「」)註釋對我的一些具體類進行了細化。 該類實際上擴展了實現接口的抽象類。 我想在未包含在該jar中的類上注入命名類。 在做這些時我需要記住哪些注意事項?

回答

1

你的問題非常含糊,所以不要期待這個答案能讓你的細節更加眩目。

該類實際上擴展了一個實現接口的抽象類。

這應該不是問題 - 最終的bean實例將具有層次結構中所有類和接口的類型。完全不用擔心。

我想在未包含在該jar中的類上注入命名類。

首先,你只能將bean注入到另一個bean中。這意味着你的其他類(不在同一個jar中)必須成爲一個bean。爲此,您可以在其他存檔中啓用CDI,並用所需的範圍對類進行註釋。

其次,另一個jar,必須與@Named bean有依賴關係,以便CDI容器可以看到這些bean。

最後但並非最不重要的一點,請確保您在豆上使用足夠的作用域。範圍屬於特定的上下文,並且每個都有不同的生命週期。因此,例如@ApplicationScoped豆從應用程序啓動直到關閉,而@RequestScoped僅在HTTP請求期間處於活動狀態。

+0

感謝您的輸入。你是對的,這是一個模糊的問題。我是CDI的新手,它的能力。當您說出具有所需範圍的類時,我使用Named()註釋對其進行了註釋。範圍如何在CDI容器中工作?您從(假設)jvm startup-shutdown開始提到AplicationScope live,並且RequestedScoped依據HTTP請求生活。我需要註釋這兩個豆嗎? – SoftwareSavant

+0

你應該看看[http://weld.cdi-spec.org/documentation/](documentation)。至於你的問題 - '@ Named'不給這個bean任何範圍,它的目標是使它成爲[http://docs.jboss.org/weld/reference/latest/en-US/html_single/#_el_name](從EL可訪問)。只有'@ Named'註解的Bean將默認具有'@ Dependent'範圍。在下一個註釋中,@ @ ApplicationScoped從** CDI容器啓動**(CDI啓動和魔法開始發生時的點)開始關閉。如果'@ Dependent'對你來說足夠好,你就不需要註釋bean(猜測不是)。 – Siliarus

+0

至於範圍如何在CDI容器中工作 - 每個人都有一個不同的生命週期,在這之後它就不復存在,並且鏈接到它的bean將被銷燬。比如在請求'@ RequestScoped' bean之後。一旦新的請求彈出,你將得到一個新的bean。你應該能夠猜到'@ SessionScoped'是如何工作的。 '@ ConversationScoped'和'@ Dependent'可能會更棘手,我(再次)建議Weld文檔。你也可以定義你自己的範圍。 – Siliarus