Java架构之切点切面增强器使用场景

  1. 关键字
    1. @controllerAdvice 中包含了@component组件,所以能被扫描到
    2. @aspect切面、@pointCut切入点、@before前置、@after后置、@around环绕、@afterthrowing异常抛出通知,切面修饰的类用组件注解
  2. 切点切面
    1. 切面修饰类,切入点修饰方法,通知修饰方法,切面由切点+通知
    2. 切点和通知一般传入五种参数
      1. 非环绕通知参数joinpoint、环绕通知参数proceedingjoinpoint、注解参数、返回值参数Object、throwable参数ex、execute对应的args里的参数
    3. 对请求流程进行控制
      1. ServletRequestAttributes ra= (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();//holder
        HttpServletRequest request= ra.getRequest();//
        HttpServletResponse response=ra.getResponse();//取返回
        String s= ra.getSessionId();//sessionid
        Object o=ra.getSessionMutex();

        HttpSession session= request.getSession();
        //session
        String authType=request.getAuthType();
        String sessionId=request.changeSessionId();
        String contextPath=request.getContextPath();
        //
        Cookie[] cookies=request.getCookies();//cookie
        String method=request.getMethod();//取切入点的方法
        String pathInfo=request.getPathInfo();//
        String queryString=request.getQueryString();
        String remoteUser=request.getRemoteUser();
        //存的用
        String uri=request.getRequestURI();//
        StringBuffer url=request.getRequestURL();//
        String servletPath=request.getServletPath();//
        Principal userPrincipal=request.getUserPrincipal();//的名
        ServletContext servletContext=request.getServletContext();
        String serverName=request.getServerName();
        Map<String,String[]> parameterMap=request.getParameterMap();
        //参数

        Object[]  args= joinPoint.getArgs();
        String kind=joinPoint.getKind();
        Signature signature= joinPoint.getSignature();
        //标类上的成
        SourceLocation sourceLocation=joinPoint.getSourceLocation();
        JoinPoint.StaticPart staticPart=joinPoint.getStaticPart();
        Object targert=joinPoint.getTarget();
        //标对
    4. 结合controller方法自定义注解做权限控制
      1. @After(value = "execution(public * cn.fanx.*.web.*Controller.*(..)) && @annotation(sysLog)")
    5. Aop与filter结合,因为执行顺序是由filter到aop拦截在到controller的,所以在进入controller之前过滤,filter粗粒度的过滤,aop细粒度过滤

 

  1. 增强器统一处理
    1. RequestBodyAdvice controller下只要有@requestBody的方法
    2. ResponseBodyAdvice controller下的方法有@responseBody的
    3. ExceptionAdvice 异常统一处理
    4. LogginAdvice 日志统一处理
    5. DelegatingIntroductionInterceptor引入增强,被实现并加@component注解
  2. @controllerAdvice对controller进行增强,如果是多模块,将增强器放入公用模块,其他模块引入公用模块,并在boot的入口处进行scan扫描公共包,才能让spring ioc扫描到controlleradvice注解
  3. 实现
    1. 实现requestBodyAdvice、responseBodyAdvice接口
    2. 异常处理方法上添加注解@ExceptionHandler,只要controller有异常就会被捕获到
  4. 作用范围 filter>interceptor>advice>aspect
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值