日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java aspectj_Java:AspectJ的异常翻译

發布時間:2023/12/3 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java aspectj_Java:AspectJ的异常翻译 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java aspectj

在這篇博客文章中,我描述了如何使用AspectJ自動將一種異常類型轉換為另一種異常類型。

問題

有時,我們處于必須將異常(通常由第三方庫引發)轉換為另一種異常的情況。 假設您正在使用像hibernate這樣的持久性框架,并且不想將特定于Hibernate狀態的hibernate異常泄漏到某個應用程序層之外。 也許您正在使用不止一種持久性技術,并且想將技術特定的異常包裝到一個通用的基本異常中。 在這種情況下,可以以如下代碼結尾:

public?class?MyRepository?{public?Object?getSomeData()?{?????try?{//?assume?hibernate?is?used?to?access?some?data}?catch(HibernateException?e)?{//?wrap hibernate specific?exception?into?a?general?DataAccessExceptionthrow?new?DataAccessException(e);}} }

當然,如果每次訪問某個框架都必須這樣做時,這將變得很丑。

AspectJ方式

AspectJ是Java的面向方面的編程 (AOP)擴展。 使用AspectJ,我們可以定義橫切關注點,為我們解決異常轉換過程。

首先,我們必須將AspectJ依賴項添加到我們的項目中:

<dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>1.7.4</version> </dependency>

接下來,我們必須為AspectJ設置ajc,編譯器和字節碼編織器。 此步驟取決于您使用的開發環境,因此在此不再贅述。 Eclipse用戶應該查看用于Eclipse的AspectJ開發工具(AJDT) 。 IntelliJ IDEA用戶應確保啟用AspectJ插件 。 還有一個AspectJ Maven插件可用(請檢查此pom.xml以獲取示例配置)。

現在讓我們使用AspectJ批注定義方面:

@Aspect public?class?ExceptionTranslationAspect?{@Around("execution(*?com.mscharhag.exceptiontranslation.repository..*(..))")public?Object translateToDataAccessException(ProceedingJoinPoint?pjp)?throws?Throwable?{try?{return?pjp.proceed();}?catch?(HibernateException?e)?{throw?new?DataAccessException(e);}} }

使用@Aspect批注,我們可以聲明一個新的方面。 在這方面,我們使用@Around注釋定義一個建議,如果傳遞的切入點匹配,該建議將始終執行。 在這里,切入點

execution(*?com.mscharhag.exceptiontranslation.repository..*(..))

每次執行com.mscharhag.exceptiontranslation.repository包中的類的方法時,告訴AspectJ調用translateToDataAccessException()。

在translateToDataAccessException()中,我們可以使用傳遞的ProceedingJoinPoint對象來進行我們截獲的方法執行。 在此示例中,我們僅在方法執行周圍添加了一個try / catch塊。 使用ProceedingJoinPoint實例,我們還可以做更多有趣的事情,例如使用pjp.getSignature()分析方法簽名或使用pjp.getArgs()訪問方法參數。

現在,我們可以從上面顯示的示例存儲庫實現中刪除try / catch塊,并使用簡單的測試來驗證我們的方面是否正常工作:

public?class?MyRepositoryTest?{private?MyRepository?repository?=?new?MyRepository();@Test(expected?=?DataAccessException.class)public?void?testExceptionTranslation()?{this.repository.getSomeData();} }

結論

使用AspectJ,我們可以輕松地自動執行Java運行時異常的轉換。 通過刪除try / catch塊,否則將簡化異常轉換,從而簡化了我們的代碼。

  • 您可以在GitHub上找到示例項目的完整源代碼。

參考: Java:我們的JCG合作伙伴 Michael Scharhag在mscharhag,Programming and Stuff博客上使用AspectJ進行了異常轉換 。

翻譯自: https://www.javacodegeeks.com/2014/02/java-exception-translation-with-aspectj.html

java aspectj

總結

以上是生活随笔為你收集整理的java aspectj_Java:AspectJ的异常翻译的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。