2020年6月4日13:32:42
如题, 笔者目前使用场景如下:
项目中使用自定义注解@loginterface
处理登陆判断,在切面中处理,如图
//Controller层切点
@Pointcut("execution (* com.qinyi.renhai.controller..*.*(..))")
public void controllerAspect() {
}
/**
* 前置通知 用于拦截Controller层记录用户的操作
*
* @param joinPoint 切点
*/
//配置controller环绕通知,使用在方法aspect()上注册的切入点
@Around("controllerAspect()")
public Object around(JoinPoint joinPoint) throws Throwable {
// 我省略了大部分代码,这里是主要的代码
//try {
Object reObj = ((ProceedingJoinPoint) joinPoint).proceed();
((ProceedingJoinPoint) joinPoint).proceed();
long end = System.currentTimeMillis();
if(logger.isInfoEnabled()){
logger.info("around " + joinPoint + "\tUse time : " + (end - start) + " ms!");
}
System.out.println("==========结束执行controller环绕通知===============");
return reObj;
// } catch (Throwable e) {
// long end = System.currentTimeMillis();
// if(logger.isInfoEnabled()){
// logger.info("around " + joinPoint + "\tUse time : " + (end - start) + " ms with exception : " + e.getMessage());
// }
// }
}
这里要注意下:
- 切面中捕获异常的话会导致全局异常捕获不生效,目前先注释掉切面捕获异常. 意思是这里不要加try catch, 如果catch了异常,那么全局的异常处理就捕获不到,也不能进行正常的数据返回
网友评论