使用切片拦截REST服务(五)

来源:互联网 发布:c语言求质数和 编辑:程序博客网 时间:2024/05/20 23:58

上一节所述的拦截器虽然可以拿到 请求 响应 以及它真正处理的方法 对象,但是它也有一些问题,它的问题就是它没法拿到拦截方法的值,拿到的只是方法的声明Handler
如果我们除了想要记录请求的类以及方法之外 还有这个方法的参数是什么,我们就要用到第三个拦截 就是切片

切片(Aspect)就是Spring 核心功能的AOP 切入点( 注解 ) 1.在哪些方法上起作用2.在什么时候起作用也就是增强(方法)起作用时执行的业务逻辑
@Aspect@Compentpublic class TimeAspect{@before 相当于 拦截器的preHandler@after 在方法成功返回以后被调用@afterThrowing在方法抛出某些异常的时候调用@Around 包含了前面三种}

Around表达式 在spring的官方网站上进入PROJECTS 进入SPRING FRAMEWORK
看它的Reference( 文档 ) 11章 Aspect Oriented Programming with Spring

/** * Created by ZhuPengWei on 2017/11/23. */@Aspect@Componentpublic class TimeAspect {    @Around("execution(* open.security.web.controller.UserController.*(..))")    public Object HandlerControllerMethod(ProceedingJoinPoint pjo) throws Throwable {        System.out.println("time aspect start !!");        Object[] args = pjo.getArgs();        for (Object arg : args) {            System.out.println(arg);        }        long time = new Date().getTime();        Object proceed = pjo.proceed();        System.out.println("耗时 :" + (new Date().getTime() - time));        System.out.println("time aspect finish");        return proceed;    }}

过滤器:可以拿到原始的Http请求的响应信息,但是拿不到处理方法的信息
拦截器:既能拿到http 请求和响应,也能拿到Http请求的方法信息,但是拿不到参数的值
切片:可以拿到参数的值,但是拿不到Http请求和响应对象的
起作用顺序 (处理机制)
Filter>Interceptor>ControlllerAdvice>Aspect>Controller

原创粉丝点击