2014-03-04 64 views
1

代碼如何將CDI攔截器創建爲單例?

@Interceptor(SomeInterceptor.class) 
public class SomeClass { 
    @Interceptor(OtherInterceptor.class) 
    public Object method1 (Object param) { 
     return param; 
    } 


    public Object method2 (Object param) { 
     return param; 
    } 
} 

問題1

是否SomeInterceptor和OtherInterceptor在每個方法調用中創建或不?

問題2

是否有可能 「設置」 Inteceptor類,使其獨居?例如。 SomeInterceptor和OtherInterceptor只創建一次。

+0

如果您對@ApplicationScoped進行了註釋,會發生什麼情況? –

回答

0

根據CDI規範,每個CDI bean應該至多攔截一個攔截器,並且其生命週期與bean中的一個綁定在一起。
所以如果你的bean是@ApplicationScoped,將只有一個'singletone'攔截器。
也有這bug in Weld

+0

鏈接到規範。 http://docs.oracle.com/javaee/6/tutorial/doc/gkigq.html – Cherry