Spring(12):使用註解(@AfterThrowing/@After/@Around)實現AOP異常增強與例項
阿新 • • 發佈:2019-02-04
2017/12/31
【1】異常丟擲增強:
在包(com\smbms\AopLog)新建一個ErrorLogger.java:
解釋:package com.smbms.AopLog; import org.apache.log4j.Logger; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Aspect; @Aspect public class ErrorLogger { private static final Logger log = Logger.getLogger(UserserviceLogger.class); @AfterThrowing(pointcut="execution(* com.smbms.pojo..*.*(..))",throwing="e") public void afterthrowing(JoinPoint jp,RuntimeException e){ log.error(jp.getSignature().getName()+" ++++++*****++++ method exception happens!!! ++++++*****++++: "+ e); } }
1、@AfterThrowing 註解;
【2】最終增強:
在包(com\smbms\AopLog)新建一個AfterLogger.java:
解釋:package com.smbms.AopLog; import org.apache.log4j.Logger; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.Aspect; @Aspect //最終增強 public class AfterLogger { private static final Logger log = Logger.getLogger(UserserviceLogger.class); @After("execution(* com.smbms.pojo..*.*(..))") public void after(JoinPoint jp){ log.info(jp.getSignature().getName()+"+++ method excute end!++"); } }
1、@After註解;
【3】環繞增強:
在包(com\smbms\AopLog)新建一個AroundLogger.java:
解釋:package com.smbms.AopLog; import java.util.Arrays; import org.apache.log4j.Logger; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; @Aspect public class AroundLogger { private static final Logger log = Logger.getLogger(UserserviceLogger.class); @Around("execution(* com.smbms.pojo..*.*(..))") public Object aroundLogger(ProceedingJoinPoint jp) throws Throwable { log.info("***UserserviceLogger*********before:呼叫了"+jp.getTarget()+" 的"+jp.getSignature().getName() +" 方法。方法入參:"+Arrays.toString(jp.getArgs())); try{ Object result = jp.proceed(); log.info("呼叫了 "+jp.getTarget()+" 的 "+jp.getSignature().getName() +" 方法。"); return result; }catch(Throwable e){ log.error(jp.getSignature().getName()+" Exception...方法發生異常: "+e); throw e; }finally{ log.info(jp.getSignature().getName()+" ENDING.....方法執行結束"); } } }
1、@Around 註解
2、宣告ProceedingJoinPoint 型別引數可以獲取連線點的資訊;
測試方法還在研究,因為異常發生時,控制檯就不會輸出,所以稍後再完善該博文。