Spring拦截服务【三】(SpringBoot使用切片Aspect)【完结】

Spring最重要的有个知识点就是切面编程AOP

@Aspect注解将表示它是一个切面
@Component表示它是一个Spring的组件

切面有很多种写法,可以在Spring的官网的11章点击查看Spring官网官方文档 本文将用@Around进行切面。

package com.yhn.web.aspect;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
/**
 * Created by yhn on 2017/12/3.
 */
@Aspect
@Component
public class TimeAspect {
     @Around("execution(* com.yhn.web.controller.UserController.*(..))")
    public Object handleControllerMethod(ProceedingJoinPoint pjp)throws Throwable{
         System.out.println("TimeAspect filter start");
         Object[] objs = pjp.getArgs();
         for(Object obj:objs){
             System.out.println("获得参数:"+obj);
         }
         Object object = pjp.proceed();  //拿到方法返回值的对象
         System.out.println("获得返回对象:"+object);
         System.out.println("TimeAspect filter end");
         return null;
     }
}

通过ProceedingJoinPoint对象的getArgs()我们可以得到传进来的参数。
通过ProceedingJoinPoint对象的proceed()我们可以得到拿到切面方法返回值的对象。

既然是拦截服务的完结篇,我当然要简单说下各自的区别和使用场景;

过滤器Filter可以拿到原始的HTTP请求和响应的信息,但是拿不到你真正处理请求方法的信息,也就是方法的信息。
拦截器Interceptor可以拿到原始的HTTP请求和响应的信息,也可以拿到你真正处理请求方法的信息,但是拿不到传进参数的那个值。

切片Aspect,既然Spring那么支持AOP,就肯定都能拿。有人会问如何拿原始的HTTP请求和响应的信息,通过以下代码应该拿得到啊哈哈哈哈

ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值