攔截器編寫規則


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