@Aspect与@ControllerAdvice

@Aspect

@Aspect用于实现Spring AOP,可以在被调用的方法执行前、执行后增加自定义的逻辑,Aspect的使用很简单,如下:

1、创建一个Aspect类(就是一个普通的类),在类前面加入如下两个注解:

@Aspect
@Component

2、创建切点

	//切点
	@Pointcut("execution(public * com.xxx.xxxx.controller..*.*(..))")
	public void yourPointcutName() {
	}

可以根据需要创建任意多个切点,切点通常是一个空的方法,仅用于指定该切点对应的被织入方法(可以通过正则表达式匹配)

3、方法调用前

	@Before("yourPointcutName()")
	public void callBeforexxx(JoinPoint joinPoint) {
		//在被调用的方法之前执行这里的代码
	}

4、方法调用后

	@AfterReturning(returning = "ret", pointcut = "yourPointcutName()")
	public void callAfterReturningxxx(JoinPoint joinPoint,Object ret) {
		//在被调用的方法之后执行这里的代码
	}

通过joinPoint可以获取被调用方法的入参,ret可以获取被调用方法的返回值。

可以在调用前记下当前时间,调用后统计接口的响应时间,注意不要用普通的全局变量,因为spring默认是单例的,需要使用ThreadLocal来实现,因为一个请求是同一个线程。

@ControllerAdvice

@ControllerAdvice用于拦截Controller的接口,比如当接口抛出异常时,可以被拦截,然后返回指定的报文(如错误信息、错误码),使用如下:

1、创建一个类,类外面加上注解:@ControllerAdvice

2、异常处理方法

	@ResponseBody
	@ExceptionHandler(value = XxxxException.class)
	public DataOutput errorHandler(XxxxException e) {
		DataOutput output = new DataOutput();
		output.setCode(e.getCode());
		output.setMsg(e.getMsg());
		return output;
	}

DataOutput是Controller接口的返回类型,可以任意自定义,当接口被调用抛出未捕获的异常XxxxException时,会触发该方法,由该方法返回指定结果,而不是Spring默认返回500之类的错误信息。
执行完@ControllerAdvice的异常处理方法后,依然会进入@AfterReturning的方法,两者可以结合使用。

 

 

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值