java与java ee_Java EE拦截器
java與java ee
歷史
我認為重要的是要看一下Java EE中Interceptor的發展,因為它是從EJB特定的項目開始的,后來又演變成一個單獨的規范,現在可供其他Java EE規范擴展,這一事實很簡單。
版本1.0
攔截器最初是在EJB 3.0 ( Java EE 5的一部分)中引入的。 攔截器沒有專門的規范,但是它們的版本為1.0,并通過簡單的注釋向托管Bean(POJO)購買了與AOP相關的基本功能:
- @AroundInvoke –注釋包含目標類方法的攔截邏輯的方法
- @Intercerptors –將攔截器類與其目標類/方法綁定在一起
- 通過部署描述符為整個模塊(EJB JAR)配置攔截器的能力
- @ExcludeDefaultInterceptors –使部署描述符中定義的默認攔截器靜音
- @ExcludeClassInterceptors –使類的特定方法/構造函數的全局定義(類級別)攔截器靜音
攔截器1.1
隨之而來的是帶有EJB 3.1的 Java EE 6 –攔截器1.1仍包含在EJB規范文檔中:
- @InterceptorBinding –一種指定類或方法的攔截器的類型安全方法。 請注意,此注釋由CDI 1.0 (Java EE 6中引入的另一個規范)所利用,并且其詳細信息位于CDI 1.0規范文檔中,而不是EJB 3.1中 (至少對我來說是燈泡時刻)。
- @Interceptor –用于在特定方法中顯式聲明一個包含攔截邏輯的類(用@AroundInvoke注釋)作為攔截器以及適當的Interceptor Binding。 僅在CDI 1.0文檔中也提到了這一點。
- @AroundTimeout –用于攔截EJB計時器的超時以及獲得被攔截的Timer實例的方式(通過javax.interceptor.InvocationContext.getTimer() )
攔截器1.2
攔截器在Java EE 7中被拆分成單獨的規范,因此攔截器1.2應運而生:
- 攔截器1.2是1.1的維護版本,因此JSR編號仍然與EJB 3.1( JSR 318 )相同。
- Interceptor.Priority (靜態類)–提供定義攔截器需要被調用的順序(優先級)的能力。
- @AroundConstruct –用于攔截目標類的構造,即在調用目標類的構造函數之前先調用邏輯
重要的是要記住,攔截器通常適用于托管bean。 托管Bean本身是簡單的POJO,容器已將其授予基本服務–攔截器是其中之一,包括生命周期回調,資源注入。
記憶輔助
將Interceptor視為可以在其整個生命周期中插入到bean的組件是有幫助的:
- 在構建它們之前– @AroundConstruct
- 構造之后– @PostConstruct
- 在他們的生命中(方法調用)– @AroundInvoke
- 銷毀之前– @PreDestroy
- EJB超時– @AroundTimeout
讓我們更詳細地了解攔截器的一些特征,并嘗試回答以下問題:
- 它們在哪里應用,它們攔截了什么?
- 如何將攔截器綁定到應該攔截的目標(類)?
攔截器類型(基于攔截的組件)
方法攔截器
- 由@AroundInvoke實現
- 包含邏輯的方法可以是單獨類的一部分,也可以是目標類(要攔截的類)本身的一部分。
生命周期回調攔截器
- 用@AroundConstruct裝飾方法,以攔截類的構造函數調用
- 用@AroundConstruct注釋的方法不能是所攔截類的一部分。 必須使用單獨的Interceptor類定義它
- 在方法上使用@PostConstruct批注,以攔截托管bean上的回調方法。 再次說明一下-攔截器規范并未這樣定義新的注釋。 需要在攔截器方法上重用@PostConstruct( 公共注釋規范的一部分 )。
- @PreDestroy (在Common Annotations規范中定義的另一個回調注解)注解以類似的方式使用
超時攔截器
- 如上所述, @ AroundTimeout用于攔截EJB計時器的超時以及獲取被攔截的Timer實例的方式(通過javax.interceptor.InvocationContext.getTimer() )
應用/綁定攔截器
使用@Interceptors
- 如以上示例所示–只需使用@Interceptors批注指定攔截器類
- @Interceptor可以在類級別上應用(自動適用于類的所有方法),如果使用@AroundConstruct進行特定于構造函數的攔截器,則可以應用于特定方法或多個方法和構造函數
使用@IntercerptorBinding
- 攔截器綁定(如上所述)–使用@IntercerptorBinding批注定義一個綁定批注,該批注在偵聽器類和目標類中將進一步使用(需要攔截其方法,構造函數等)
部署描述符
人們還可以使用部署描述符以明確的方式以及以覆蓋模式將注釋器和目標類綁定到注釋。
這是Java EE攔截器的快速概述。 希望您找到更深層次的正確觸發!
翻譯自: https://www.javacodegeeks.com/2015/01/java-ee-interceptors.html
java與java ee
總結
以上是生活随笔為你收集整理的java与java ee_Java EE拦截器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 咸吃萝卜淡操心是什么意思 咸吃萝卜淡操心
- 下一篇: 如何找回删除的微信聊天记录