以 下是到目前所談及的主題為止,一些攔截器撰寫程式碼時,所要知道的瑣瑣碎碎規則:
- 攔截器定義位置...
- 可以定義於Bean之上。
- 可以定義於另一個獨立類別。
- 一個編譯單元只能有一個@AroundInvoke定義。
- 若要多個攔截器方法,就是一個類別中定義一個攔 截器方法,在於Bean上使用@Interceptor指定。
- 若為上點,攔截器的執行順序為@Interceptor中定義的順序。
- 方法定義都必須有InvocationContext參數...
- 商務方法攔截器必須是以下模式:
@AroundInvoke
Object anyMethodName(InvocationContext context) throws Exception;
Object anyMethodName(InvocationContext context) throws Exception;
- 生命週攔截器必須是以下模式,一個方法上可以同時標註多個生命週期 Annotation:
@PostConstruct
(或@PreDestroy、@PrePassivate、
@PostActivate)
void anyMethodName(InvocationContext context);
void anyMethodName(InvocationContext context);
- 例外處理...
- 商務方法攔截器可以 丟出Checked Exception、RuntimeException,可以catch例外加以處理。
- 若在呼叫proceed()前丟出例外,接下來的商務方法攔截器與目標方法不會被執
行。
- 生命週期攔截器可以丟出RuntimeExvception,不可丟出 Checked Exception。
- 攔截器上的生命週期回呼中,呼叫InvocationContext的proceed()是必要的,這讓下一個攔截器上的生命週期回呼與Bean生命週期回呼可以執行
- 生命週期攔截器如果丟出例
外,其它的生命週期攔截器將不被執行。