实现方式一:
引入spring项目必须的AOP包,其次还需要引入aspectjweaver包。
定义spring容器管理的切面类:
@Aspect
@Component
public class StudentAspect {
private static Logger logger = LogManager.getLogger(StudentAspect.class.getName());
//定义切点
@Pointcut("execution(* service.StudentService.deleteStudentBySid(..))")
public void delStudentBySid(){}
@Pointcut("execution(* service.StudentService.addStudent(..))")
public void addStudent(){}
//定义切面方法 其中JoinPoint为切点对象,我们可以通过此对象取得切点参数值等信息
//returning定义了切点方法返回值
@AfterReturning(value = "delStudentBySid()",returning = "returnValue")
public void delStudentBySidLog(JoinPoint jp,boolean returnValue){
logger.info("学生: (Id)"+jp.getArgs()[0]+" 已经被删除");
}
@AfterReturning(value = "addStudent()",returning = "returnValue")
public void addStudentLog(JoinPoint jp,boolean returnValue){
Student student = (Student) jp.getArgs()[0];
logger.info("新增学生:"+student.getSname());
}
@AfterThrowing(value = "delStudentBySid()",throwing = "ex")
public void delStudentBySidExceptionLog(JoinPoint jp,Exception ex){
logger.info("学生: (Id)"+jp.getArgs()[0]+" 删除异常");
}
@AfterThrowing(value = "addStudent()",throwing = "ex")
public void daddStudentExceptionLog(JoinPoint jp,Exception ex){
Student student = (Student) jp.getArgs()[0];
logger.info("学生: "+student.getSname()+"添加异常");
}
}
网友评论