@AfterThrowing 不会干活。。。
package aop;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class TestAspect {
@Pointcut("execution(* *(..))")
public void pcMethod(){};
@Around("pcMethod()")
public void doAround(ProceedingJoinPoint pjp){
long time = System.currentTimeMillis();
try {
pjp.proceed();
} catch (Throwable e) {
e.printStackTrace();
}
time = System.currentTimeMillis() - time;
System.out.printf("方法执行耗时:%d毫秒",time);
}
@Before("pcMethod()")
public void doBefore(){
System.out.println("安全检测(方法执行之前)");
}
@After("pcMethod()")
public void doAfter(JoinPoint jp){
System.out.println("日志记录(方法执行之后)");
StringBuilder sb = new StringBuilder();
sb.append(jp.getTarget().getClass().getName());
sb.append(".");
sb.append(jp.getSignature().getName());
sb.append("(");
Object[] obj = jp.getArgs();
for(int i=0;i<obj.length;i++){
sb.append(obj[i]);
if(i<obj.length-1) sb.append(",");
}
sb.append(")");
System.out.println(sb.toString());
}
@AfterThrowing(pointcut = "pcMethod()",throwing="e")
public void doException(JoinPoint jp,Exception e){
if(e!=null){
System.out.println("执行异常:" + e.getMessage());
sendMsg();
}
}
private void sendMsg(){
System.out.println("发送出错报告");
}
/**/
}