1、在pom文件中添加aop的依赖
2、使用示例参考如下
/**
*@authorfangzy
*@since2017/8/14.
*类级注解:
*@Aspect声明这是一个切面对象
*方法级注解:
*@Pointcut声明一个切点规则
*@Before方法执行之前,执行通知。
*@After方法执行之后,不考虑其结果,执行通知。
*@AfterReturning方法执行之后,只有在方法成功完成时,才能执行通知
*@AfterThrowing方法执行之后,只有在方法退出抛出异常时,才能执行通知
*@Around在方法调用之前和之后,执行通知 等价于上面四个相加
*/
@Component
@Aspect
public classMyAdvice {
Loggerlogger= LoggerFactory.getLogger(MyAdvice.class);
// expression配置切点的表达式,切到哪
@Pointcut("execution(* com.example.springboot.*Service.*(..))")
private voidbusinessService() {
}
//在一个方法执行之前,执行通知。
@Before("businessService()")
public voiddoBeforeTask(JoinPoint joinPoint) {
logger.info("doBeforeTask.");
ServletRequestAttributes requestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest request = requestAttributes.getRequest();
logger.info("请求的ip:{}",request.getRemoteAddr());
logger.info("请求的uri:{}",request.getRequestURI());
logger.info("请求的method:{}",request.getMethod());
logger.info("请求的类方法:{}.{}",joinPoint.getSignature().getDeclaringTypeName(),joinPoint.getSignature().getName());
logger.info("请求参数{}",joinPoint.getArgs());
}
//在一个方法执行之后,不考虑其结果,执行通知。
@After("businessService()")
public voiddoAfterTask() {
logger.info("doAfterTask.");
}
//在一个方法执行之后,只有在方法成功完成时,才能执行通知。
@AfterReturning(pointcut="businessService()",returning="retVal")
public voiddoAfterReturnningTask(JoinPoint joinPoint,Object retVal) {
String methodName = joinPoint.getSignature().getName();
logger.info("doAfterReturnningTask {} return with {}",methodName,retVal);
}
//在一个方法执行之后,只有在方法退出抛出异常时,才能执行通知
@AfterThrowing(pointcut="businessService()",throwing="ex")
public voiddoAfterThrowingTask(JoinPoint joinPoint,Exception ex) {
String methodName = joinPoint.getSignature().getName();
logger.info("doAfterThrowingTask {} occurs exception: {} ",methodName,ex);
}
//在建议方法调用之前和之后,执行通知。
@Around("businessService()")
publicObjectdoAroundTask(ProceedingJoinPoint jpoint) {
Object result =null;
String methodName = jpoint.getSignature().getName();
//执行目标方法
try{
//前置通知
logger.info("The method {} begins with {}",methodName,Arrays.asList(jpoint.getArgs()));
result = jpoint.proceed();
//返回通知
logger.info("The method {} ends with {} ",methodName,Arrays.asList(jpoint.getArgs()));
}catch(Throwable e) {
//异常通知
logger.info("The method {} occurs expection {} ",methodName,e);
throw newRuntimeException(e);
}
//后置通知
logger.info("The method {} ends",methodName);
returnresult;
}
}