シーン:共通の例外処理、コードクリーナーと直接試し{}キャッチ(){}を回避
使用します。
1.依存性:
<依存性> <のgroupId> org.springframework.boot </のgroupId> <たartifactId>ばねブートスタータAOP </たartifactId> </依存>
2.カットは、直接法を避ける - >これは、その後スライスutilsの、exceptionHandlerUtilsを使用しています
exceptionHandlerUtils:
@ SLF4J @Component パブリック クラスExceptionHandlingUtils { 公共 ボイドthrowDAOException(例外e){ e.printStackTrace(); log.error( "によって引き起こさは、MySQLに予約動作に失敗しました:{}" 、e.getMessage()、E)。 スロー 新しいDAOException(e.getMessage()、e)を、 } 公共 ボイドprintEmailException(例外e、文字列対象文字列に){ e.printStackTrace(); log.errorは( "*** EmailExceptionは、によって引き起こされる、*** {} {}にメールを送信できませんでした:{}" は、被験体に、e.getMessage())。 } 公共 のボイドthrowJSONConvertException(例外e){ e.printStackTrace(); log.error( "によって引き起こさ読み出しJSONツリーに遭遇する例外:{}" 、e.getMessage()、E)。 スロー 新しいJSONConvertException(e.getMessage()、e)を、 } }
3. AOPのセクション:
ExceptionHandlingAspect
@Aspect @Configuration @ SLF4J パブリック クラスExceptionHandlingAspect { @value( "$ {mail.common.from}" ) 民間からの文字列。 @value( "$ {mail.common.to}" ) プライベート文字列に、 @Autowired プライベートMesgHelper mesgHelper。 / ** * @param ジョインポイント * @paramの元、获取的异常 * / @AfterThrowing(ポイントカット = "実行(* com.icil.elsa.auo.common.util .. *(..))"、投げ= " EX」) 公共 無効afterThrowingCommon(ジョインポイントジョインポイント、のThrowable EX)は{ log.error( "例外は{}によって引き起こされ、検出された" 、ex.getMessage())。 もし(元のinstanceof DAOException){ commonProcess(EX)。 } そう であれば(EX のinstanceof RestClientException){ commonProcess(EX)。 } そう であれば(EX のinstanceof にConnectionException){ commonProcess(EX)。 } } プライベート ボイドcommonProcess(ThrowableのEX){ log.error("名前の処理例外{}" 、ex.getClass()getSimpleName())。 オブジェクト[]パラスの = {DateUtils.getBeiJingDateLoc()}。 文字列被写体 = mesgHelper.getMessage( "exception.handling.common.subject"、パラス、NULL ); ストリングexSimpleName = ex.getClass()getSimpleName()。 文字列本体 = ex.getMessage()。 オブジェクト[]のparams = {exSimpleName、本体}。 文字列の内容 = mesgHelper.getMessage( "exception.handling.common.content"、paramsは、NULL ); MailUtils.sendMail(主題、内容から、まで)。 } }
4.:
試す{ // 何かやっ } キャッチ(例外e){ exceptionHandlingUtils.throwDAOException(e)を、 }