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++

  • 相关阅读:
    正则中[A-z]与[A-Za-z]的区别
    .Net Core 缓存方式(二)DistributedSqlServerCache实现(2)
    .Net Core 缓存方式(二)分布式缓存及MemoryDistributedCache 实现(1)
    anaconda安装后spyder打不开的解决方法
    Pandas
    CrawlSpider、分布式、增量式
    Scrapy之数据解析与数据持久化存储
    封装axios库
    vue全国省市选择vue组件
    html+jq实现全国省的单选,弹框输入input
  • 原文地址:https://www.cnblogs.com/stst/p/4908817.html
Copyright © 2011-2022 走看看