我有一些bean,在特定的注入中,我想添加一個給定的攔截器。如何在注入時指定攔截器
我天真地以爲有東西像一個@Interceptors
註解,可以讓我寫
private @Interceptors(Logging.class, Connection.class) @Inject MyBean instance;
不幸的是,Weld documentation明確指出相反。
那麼,我該如何注入我的bean的攔截版本?是否有可能使用cdi實例對象?
編輯
雖然LightGuard的answser真的是相關的,它不完全answser我的問題,所以讓我改一下吧。
我想要一個註釋觸發某種方法調用事件發送。爲此,我創建了一個CDI Interceptor
,它具有自己的攔截器綁定(假設攔截器被稱爲SenderInterceptor
,綁定被稱爲SenderBinding
)。我現在想要的是添加CDI限定符(我們稱之爲SenderQualifier
),當用於注射時,安裝SenderInterceptor
。
更清楚,我想下面的代碼使用SenderInterceptor
/* calling any method of that bean should trigger an event */
private @Inject @SenderQualifier MyBean aBean;
,而這其中並不
private @Inject MyBean aBean;
我試了一下,到目前爲止是
- 檢測需要使用反射庫進行注射的領域(有效)
- 使用縫焊創建一個
AnnotatedType
來自bean類(在BeforeBeanDiscovery事件期間)(該類型被創建,但不能與最初的類別區分開),並給出了攔截器綁定註釋AnnotatedType
。 - 創建使用縫焊(再次)從產生
AnnotatedType
一個Bean,並給予它必要的註釋預選賽
一切似乎worrk,除了它的其中被注入原豆。
我當然可以用截取的一個取代原來的一個,但是在某些情況下不需要這種截取,所以我必須保留兩個AnnotatedType
引用相同的具體類型。我以爲我在CDI上做了這些,但似乎並不奏效(因爲原始類型永遠不會被攔截的替換掉)。
我第一次聽說過這些項目。 +1以及它可以添加的方式。但是,我想我實際上應該在現有的類型旁邊添加類型,而不是簡單地替換它們。 – Riduidel 2012-01-17 09:44:33
實際上,在我的情況下,應該在'BeforeBeanDiscovery'事件處理程序方法中使用'AnnotatedTypeBuilder'(因爲'ProcessAnnotatedType'允許類型添加,但只能替換類型)。 – Riduidel 2012-01-17 10:29:05
對不起,@LightGuard,但我必須將您的答案標記爲非答覆。 – Riduidel 2012-01-17 13:29:25