1. 异常信息收集
在业务方法执行时,如果有异常抛出,则根据异常信息记录日志
package cn.tedu.em.aspect;
import java.io.FileWriter;
import java.util.Date;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Component
@Aspect
public class LoggerAspect {
@AfterThrowing(value = "execution(* cn.tedu.em.service..*.*(..))",throwing="e")
public void afterThrowing(JoinPoint jp,Throwable e) throws Exception{
Class clz = jp.getTarget().getClass();
String name = jp.getSignature().getName();
String eMsg = e.getMessage();
FileWriter writer = new FileWriter("err.log",true);
String info = new Date().toLocaleString()+"--"+clz+"--"+name+"--"+eMsg;
writer.write(info+"\r\n");
writer.flush();
writer.close();
}
}
2.统计业务方法执行的时间
统计所有业务方法执行时的耗时
package cn.tedu.em.aspect;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Component
@Aspect
public class UseTimeAspect {
@Pointcut("execution(* cn.tedu.em.service..*(..))")
public void mx(){
}
@Around("mx()")
public Object around(ProceedingJoinPoint pjp) throws Throwable{
long begin = System.currentTimeMillis();
Object obj = pjp.proceed();
long end = System.currentTimeMillis();
System.out.println("--useTime:["+(end - begin)+"]--");
return obj;
}
}
3. 实现事务控制
通过AOP实现事务控制,通过注解来标识方法是否需要事务
a. 开发事务注解
package cn.tedu.em.anno;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Trans {