1. 程式人生 > >利用spring aop 處理異常

利用spring aop 處理異常

興趣來了想實現一個異常日誌記錄,將某些方法呼叫錯誤資訊儲存。然後程式繼續丟擲異常,單純記錄流水。
下面簡單記錄使用aop實現,上程式碼吧

記得配置
<!-- 開啟spring aop -->
<aop:aspectj-autoproxy/>
package com.xyw.annotation;

import java.lang.annotation.*;

/**
 * Created by xuyw on 2016/8/19.
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface PrintLog { String msg(); }
package com.xyw.web.aop;

import com.alibaba.fastjson.JSON;
import com.xyw.annotation.PrintLog;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework
.stereotype.Component; import java.io.ByteArrayOutputStream; import java.io.PrintStream; /** * Created by xuyw on 2016/8/16. */ @Aspect @Component public class AopUtil { @Around("execution( public * com.xyw.service.*.impl.*.*(..)) && @annotation(log)") public Object arount(ProceedingJoinPoint pj, PrintLog log) throws Throwable { try { return pj.proceed
(); } catch (Throwable e) { Object[] param = pj.getArgs();//引數 printLog(e, param, log); throw e; } } private void printLog(Throwable e, Object[] param, PrintLog log) { try { System.err.println("執行:\n" + log.msg()); System.err.println("param:\n" + JSON.toJSONString(param)); ByteArrayOutputStream out = new ByteArrayOutputStream(); PrintStream stream = new PrintStream(out); e.printStackTrace(stream); stream.close(); out.close(); System.err.println("發生異常:\n" + new String(out.toByteArray(), "UTF-8")); } catch (Exception e1) { e1.printStackTrace(); } } }
測試故意丟擲異常
 @Override
    @PrintLog(msg="測試aop")
    public void testAop() {
        int i=1/0;
    }

相關推薦

利用spring aop 處理異常

興趣來了想實現一個異常日誌記錄,將某些方法呼叫錯誤資訊儲存。然後程式繼續丟擲異常,單純記錄流水。 下面簡單記錄使用aop實現,上程式碼吧 記得配置 <!-- 開啟spring aop --&g

如何利用Spring AOP實現異常重試

微信公眾號:deepstack   歡迎一起交流 背景:在業務中,出現方法執行失敗需要重試的場景很多,如網路抖動導致的連線失敗或者超市等。 優雅實現: 1、減少程式碼侵入 2、方便可用 3、配置靈活 步驟: 1、建立一個annotation。原始碼如

利用Spring進行統一異常處理的兩種方式

package com.jay.platform.exception.handler; import java.io.IOException; import java.net.ConnectException; import java.net.SocketTimeoutException; import

利用Spring AOP自定義註解解決日誌和簽名校驗

一、需解決的問題 部分API有簽名引數(signature),Passport首先對簽名進行校驗,校驗通過才會執行實現方法。     第一種實現方式(Origin):在需要簽名校驗的接口裡寫校驗的程式碼,例如: boolean isValid = accountService.val

使用AOP處理異常與日誌列印

本文轉載自曉風輕部落格:https://xwjie.github.io/ResultBean定義定義ResultBean,帶泛型,使用lombok。@Data public class ResultBean<T> implements Serializable {

利用 Spring Aop 動態維護多資料來源

一、回顧AOP 首先還是回顧下AOP的定義。 在百度百科中看到AOP是這樣的一個定義。在軟體業,AOP為Aspect Oriented Programming的縮寫, 意為:面向切面程式設計,通過預編譯方式和執行期動態代理實現程式功能的統一維護的一種技術。

利用spring aop攔截並獲取@ResponseBody資料

攔截請求有很多種方法,最簡單的用攔截器,但是攔截器並不能獲取返回的資料(比如@ResponseBody),上網找了一段時間,可以利用spring的AOP特性攔截並獲取,還能修改返回的資料。 準備

利用Spring AOP和redis的鎖來實現防止表單重複提交

表單重複提交是在web中存在的一個很常見,會帶來很多麻煩的一個問題。尤其是在表單新增的時候,如果重複提交了多條一樣的資料,帶來的麻煩更大。 實現防止表單重複提交的方法有前端限制和後臺限制1、前端限制就是當點選了提交按鈕之後,就給按鈕新增屬性disabled,然後等後臺返回提交

spring @ControllerAdvice處理異常無法正確匹配自定義異常問題

首先說結論,使用@ControllerAdvice配合@ExceptionHandler處理全域性controller的異常時,如果想要正確匹配自己的自定義異常,需要在controller的方法上丟擲相應的自定義異常,或者自定義異常繼承RuntimeExcept

Spring AOP環繞異常影響的報錯

最近遇到一個問題,異常是: java.lang.ClassCastException: org.springframework.http.ResponseEntity cannot be cast to org.springframework.web.servlet.ModelAndView 網上去stac

日誌異常處理-spring aop註解

get target public ring -s row imp for method spring aop 可以在不破壞我們程序代碼的前提下很好的對程序異常進行打印,網上也有很多這樣的例子,我這裏寫的比較簡單,只是針對程序出異常時進行見到的日誌打印,代碼比較簡單。

基於spring aop的dubbo異常統一處理

dubbo統一異常處理,呼叫方只顯示封裝後的異常。 1、返回封裝後的Exception 2、返回封裝後的統一返回資訊 import org.aspectj.lang.annotation.AfterT

spring AOP中的AfterThrowing增強處理不能完全處理異常

spring AOP中的AfterThrowing增強處理可以對目標方法的異常進行處理,但這種處理與直接使用catch捕捉處理異常的方式不同,catch捕捉意味著能完全處理異常,即只要catch塊本身不丟擲新的異常,則被處理的異常不會往上級呼叫者進一步傳播下去;但是如果

spring Aop實現身份驗證和springboot異常統一處理

文章有不當之處,歡迎指正,如果喜歡微信閱讀,你也可以關注我的微信公眾號:好好學java,獲取優質學習資源。 一、spring Aop身份驗證 一般,如果使用者沒有登入的話,使用者只可以檢視商品,但是其他的,比如支付等是不能夠進行操作的,這個時候,我們

spring boot AOPspring boot統一異常處理

一,spring AOPspring boot使用AOP,程式碼如下,程式碼比較簡單就不細說了,直接上程式碼,可以使用AOP做日誌處理package com.qwrt.fire.sensor.aop; import com.alibaba.fastjson.JSONArra

使用Spring MVC統一異常處理實戰

tro 處理機制 tor attr 運行 target icon message 404錯誤 原文地址:http://cgs1999.iteye.com/blog/1547197 1 描述 在J2EE項目的開發中,不管是對底層的數據庫操作過程,還是業務層的處理過程,還是控

Spring Boot? 統一異常處理

xtend import put itl ava advice efault ges spring 效果區: 代碼區: package com.wls.integrateplugs.exception.dto; public class ErrorI

Spring @Async的異常處理

如何 readn www. cat 發生 implement tle ted 操作 樓主在前面的2篇文章中,分別介紹了Java子線程中通用的異常處理,以及Spring web應用中的異常處理。鏈接如下: Java子線程中的異常處理(通用) Spring web引用中的異

模仿spring-aop的功能,利用註解搭建自己的框架。

屬性 def name rac java8 out fault 一個 lte 入JAVA坑7月有余,也嘗試自己手動搭建框架,最近對spring aop的這種切面很著迷,為此記錄下自己目前搭出來的小小的demo,後續有時間也會繼續改進自己的demo。望大神們不吝賜教。   主

spring 處理異常

CA xtend cep src mage 進行 tps print repos 一、將異常映射為HTTP狀態碼 (本篇所用代碼承接 構建 Spring web 應用程序中的) 首先自定義一個異常類 SpittleNotFoundException import org