• Aop中动态横切与静态横切


    什么是动态横切,静态横切?动态和静态的区别在哪?

     首先,横切是面向方面编程的专用名词;大概是指在对象中插入新的职责;就好像一面包,我们把它从中间切开,放入点肉类,就成了汉堡,吃起来味道就不一样了;
    横切有两种,动态横切与静态横切;经常我们用到动态横切就是指方法拦截,而静态就是MIXIN;
    动态横切是通过切入点(pointcut)和链接点(joint point)在一个方面(aspect)中的创建行为的过程;方面(aspect)定义了所有的链接点,切入点以及通知(advice),以便把需要切入的职责(interweave)注入到原来的对象中;
    (名词解释:链接点(joint point)指需要我们要注入职责的地方;切入点(pointcut)确定具体植入位置,在职责前植入还是在后植入;通知(advice)也就拦截器了,就是你需要现在这些职责的代码;)

    静态横切是通过在不修改原有职责的基础上增加新的职责;以往我们用过类的继承来实现,但继承是种强依赖关系,怎么让他们松藕,这个时候我们用静态横切,用mixin;
    比如:
     class zoo {
        //职责
        public string 发声(){.....}
    }
    class bird : zoo {
       pubic string 飞行 (){.......}
    }
    class newbird{
      pubic string 飞行 (){.......}
    }
    如果我们使用minix,,在定义bird的时候 ,我们就不需要继承zoo了 。。我们只需要增加配置:
    aspect newbirdAspect for newbird
        include zoo
    end

    那么我们在运行时候就有:
    AspectLanguageEngineBuilder b = new AspectLanguageEngineBuilder (配置文件);
    AspectEngine aEngine = b.build();
    newbird obj = aEngine .WrapClass(typeof(newbird )) as newbird ;
    obj .飞行();  //这里就是MIXIN的功劳了
    obj .发声();
  • 相关阅读:
    如何判断是否是ssd硬盘?win10查看固态硬盘的方法
    MongoDB简单使用 —— 基本操作
    MongoDB简单使用 —— 驱动
    Visual Studio新的 .csporj 文件
    MongoDB简单使用 —— 安装
    关于MongoDB时区问题
    利用dynamic简化数据库的访问
    BrowserLog——使用Chrome控制台作为Log查看器
    在Asp.net core返回PushStream
    使用GIT进行源码管理——GIT托管服务2018
  • 原文地址:https://www.cnblogs.com/pojia/p/1138461.html
Copyright © 2020-2023  润新知