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

  • 相关阅读:
    jeecms 强大的采集功能优化 转载 https://blog.csdn.net/jeff06143132/article/details/7099003
    JEECMS自定义标签开发步骤
    jeecms之全文检索
    jeecms怎么修改后台访问路径?
    jeecms 基本架构研究
    Java JNI初探
    《高效程序员的45个习惯》
    Java并发编程:Thread类的使用
    Thread详解
    JAVA多线程实现的四种方式
  • 原文地址:https://www.cnblogs.com/stst/p/4908817.html
Copyright © 2020-2023  润新知