zoukankan      html  css  js  c++  java
  • 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 .发声();
  • 相关阅读:
    【反射】Java反射机制
    Composer教程之常用命令
    Composer教程之基础用法
    Composer教程之初识Composer
    Composer 的结构详解
    现代 PHP 新特性系列(七) —— 内置的 HTTP 服务器
    现代 PHP 新特性系列(一) —— 命名空间
    现代 PHP 新特性系列(二) —— 善用接口
    现代 PHP 新特性系列(三) —— Trait 概览
    现代 PHP 新特性系列(四) —— 生成器的创建和使用
  • 原文地址:https://www.cnblogs.com/pojia/p/1138461.html
Copyright © 2011-2022 走看看