本文介紹了CDI從另一個罐子裝飾服務的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我想使用CDI的Decorator模式來增強服務提供的業務邏輯。我試圖修飾的服務位于另一個模塊中(用maven術語來說),因此是另一個JAR。例如,提供的服務在模塊com.acme.provider
中,而裝飾符在com.acme.consumer
中,緊挨著服務使用者。
我的服務按原樣注入,沒有任何修飾。
裝飾符在使用者模塊內的beans.xml
中聲明。
我提供了一個工作示例here。在mvn install
上,測試打印”Hello”,而不是應用修飾符時的”Hello World”。
如果我將修飾符(及其XML聲明)移動到Providers模塊(請參閱同一存儲庫的分支decorator-in-provider
),則一切正常,并打印出”Hello World”。
如果裝飾器只有在提供者Bean和裝飾器本身的代碼都在同一模塊中時才能工作,我認為它幾乎沒有什么用處。對Java EE裝飾器模式有這樣的限制嗎?還是我做錯了什么?
感謝您的真知灼見。
推薦答案
好的,正式化我的問題幫助我找到了答案。
根據Oracle’s tutorials:
您在beans.xml文件中指定的修飾符僅適用于
類在同一存檔中。使用@PRIORITY注釋指定
應用程序的全局修飾符,該應用程序由
模塊。
@Decorator
@Priority(Interceptor.Priority.APPLICATION)
public abstract class CoderDecorator implements Coder { ... }
我的工作示例存儲庫中的分支solution
以正確的方式解決了問題。
這篇關于CDI從另一個罐子裝飾服務的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,