zoukankan      html  css  js  c++  java
  • 用Logger来解释拦截

    HZ

    动态代理学了 不知道在工作中杂用哦

    HE

    现在一般不会直接用吧,一般都是用aspectJ这种完整aop的实现

    STST

    拦截方法调用

    HZ

    我见过把所有accessor方法放到切面的

    还有transaction肯定都是在切面的

    STST

    比如一个方法,记录要保存起来
    用来验证用户名密码,如果不拦截的话就要如下处理
    bool Valid(string user,string pwd)
    {
    ret=验证用户名密码(user,pwd);
    记录日志(time,user,pwd,ret);
    返回 ret;
    }

    ZH

    典型的就是你会用spring就好了

    STST

    这种方式把不是Valid必须要得逻辑牵扯进来了

    HE

    嗯嗯,spring实现的事务是一个比较好的例子

    简单理解就是在service方法执行之前动态调用申明事务开始,在方法结束后执行事务提交,方法本身中看不到和事务打交道的代码

    ZH

    前段时间测的一个jar,开发用了动态代理,不过一般web开发是用不上的

    STST

    如果拦截的话就相当于下面,客户端对Valid的调用被拦截到另外一个方法:
    bool Valid2(string user,string pwd)
    {
    ret=Valid(user,pwd);
    记录日志(time,user,pwd,ret);
    return ret;
    }

    这样把记录日志的 功能从Valid方法移动到Valid2方法上来了

    HZ

    ok

    STST

    而Valid2方法是用户来写的代码,不是Valid方法的作者写的

    HE

    logger也是个非常棒的例子

    STST

    这样Valid2实际上是可扩展的,因为是由客户写的

    HZ

    这样说拦截器 都是动态代理实现的了

    STST

    ,是一个说法

    不过动态代理有多种实现

    前面提到的直接修改字节码,外覆类都是一种途径

    还有就是在源程序编译时拦截,对于静态类型的语言来说,这是唯一的方式,如C/C++

  • 相关阅读:
    极速安装JumpServer
    高并发限流策略
    JDK1.8源码分析:Future和FutureTask-任务异步执行结果
    nginx 转发 header 数据丢失
    zookpeer 和 redis 集群内一致性协议 及 选举 对比
    Spring Boot 中 Druid 的监控页面配置
    eclipse使用正则表达式查找替换
    jvm 线程状态
    Redis做分布式锁
    Dubbo的异常处理
  • 原文地址:https://www.cnblogs.com/stst/p/4908817.html
Copyright © 2011-2022 走看看