成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

初識(shí)AOP(面向切面編程)

Lavender / 1276人閱讀

摘要:初識(shí)面向切面編程的定義是什么目前自己的理解是把一個(gè)函數(shù)動(dòng)態(tài)的的插入到另外一個(gè)函數(shù)當(dāng)中,就像一個(gè)鉤子一樣。面向切面編程是的首字母縮寫,我們知道,面向?qū)ο蟮奶攸c(diǎn)是繼承多態(tài)和封裝。

初識(shí)AOP(面向切面編程) AOP的定義

AOP是什么?目前自己的理解是把一個(gè)函數(shù)‘動(dòng)態(tài)的的插入’到另外一個(gè)函數(shù)當(dāng)中,就像一個(gè)鉤子一樣。下面是詳細(xì)的定義。

面向切面編程(AOP是Aspect Oriented Program的首字母縮寫) ,我們知道,面向?qū)ο蟮奶攸c(diǎn)是繼承、多態(tài)和封裝。而封裝就要求將功能分散到不同的對(duì)象中去,這在軟件設(shè)計(jì)中往往稱為職責(zé)分配。實(shí)際上也就是說(shuō),讓不同的類設(shè)計(jì)不同的方法。這樣代碼就分散到一個(gè)個(gè)的類中去了。這樣做的好處是降低了代碼的復(fù)雜程度,使類可重用。

但是人們也發(fā)現(xiàn),在分散代碼的同時(shí),也增加了代碼的重復(fù)性。什么意思呢?比如說(shuō),我們?cè)趦蓚€(gè)類中,可能都需要在每個(gè)方法中做日志。按面向?qū)ο蟮脑O(shè)計(jì)方法,我們就必須在兩個(gè)類的方法中都加入日志的內(nèi)容。也許他們是完全相同的,但就是因?yàn)槊嫦驅(qū)ο蟮脑O(shè)計(jì)讓類與類之間無(wú)法聯(lián)系,而不能將這些重復(fù)的代碼統(tǒng)一起來(lái)。

也許有人會(huì)說(shuō),那好辦啊,我們可以將這段代碼寫在一個(gè)獨(dú)立的類獨(dú)立的方法里,然后再在這兩個(gè)類中調(diào)用。但是,這樣一來(lái),這兩個(gè)類跟我們上面提到的獨(dú)立的類就有耦合了,它的改變會(huì)影響這兩個(gè)類。那么,有沒(méi)有什么辦法,能讓我們?cè)谛枰臅r(shí)候,隨意地加入代碼呢?這種在運(yùn)行時(shí),動(dòng)態(tài)地將代碼切入到類的指定方法、指定位置上的編程思想就是面向切面的編程。

一般而言,我們管切入到指定類指定方法的代碼片段稱為切面,而切入到哪些類、哪些方法則叫切入點(diǎn)。有了AOP,我們就可以把幾個(gè)類共有的代碼,抽取到一個(gè)切片中,等到需要時(shí)再切入對(duì)象中去,從而改變其原有的行為。

這樣看來(lái),AOP其實(shí)只是OOP的補(bǔ)充而已。OOP從橫向上區(qū)分出一個(gè)個(gè)的類來(lái),而AOP則從縱向上向?qū)ο笾屑尤胩囟ǖ拇a。有了AOP,OOP變得立體了。如果加上時(shí)間維度,AOP使OOP由原來(lái)的二維變?yōu)槿S了,由平面變成立體了。從技術(shù)上來(lái)說(shuō),AOP基本上是通過(guò)代理機(jī)制實(shí)現(xiàn)的。

AOP在編程歷史上可以說(shuō)是里程碑式的,對(duì)OOP編程是一種十分有益的補(bǔ)充。

喜聞樂(lè)見(jiàn)的代碼
    Function.prototype.before = function(beforeFn) {
      var _self = this; // 保存原函數(shù)引用
      return function(){ // 返回包含了原函數(shù)和新函數(shù)的‘代理’函數(shù)
        beforeFn.apply(this, arguments); // 執(zhí)行新函數(shù),修正this
        return _self.apply(this, arguments); // 執(zhí)行原函數(shù)
      }
    };

    Function.prototype.after = function(afterFn) {
      var _self = this;
      return function(){
        var ret = _self.apply(this, arguments);
        afterFn.apply(this, arguments);
        return ret;
      }
    }

    var obj = {
      name: "tangdy",
      before: "this is before",
      after: "this is after",
      method: function(){
        console.log(this.name);
      }
    }

    obj.method = obj.method.before(function(){
     console.log(this.before)
    }).after(function(){
     console.log(this.after)
    });
    obj.method();
    // this is before
    // tangdy
    // this is after

beforeafter都會(huì)返回一個(gè)新的函數(shù)(一個(gè)函數(shù)外殼),將原來(lái)的函數(shù)儲(chǔ)存到新的函數(shù)當(dāng)中,同時(shí)把傳入的函數(shù)也儲(chǔ)存到新的函數(shù)。

var _self = this; // 保存原函數(shù)引用此處的this為什么會(huì)是原函數(shù)的引用?

調(diào)用時(shí)的語(yǔ)法:obj.method.before(...);before的前一個(gè)調(diào)用棧是method,所以before內(nèi)部的this采用了隱式綁定,this就是method。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/81608.html

相關(guān)文章

  • Spring之旅第七站:面向切面編程(AOP)

    摘要:面向切面的本章主要內(nèi)容面向切面編程的基本原理通過(guò)創(chuàng)建切面使用注解為切面注入依賴。什么是面向切面編程切面能夠幫我們模塊化橫切關(guān)注點(diǎn)。在使用面向切面編程時(shí),我們?nèi)匀辉谝粋€(gè)地方定義通知功能,而無(wú)需修改受影響的類。切面切面是通知和切點(diǎn)的結(jié)合。 面向切面的Spring 本章主要內(nèi)容: 面向切面編程的基本原理 通過(guò)POJO創(chuàng)建切面 使用@Aspect注解 為AspectJ切面注入依賴。 說(shuō)明 ...

    趙連江 評(píng)論0 收藏0
  • Spring AOP 源碼初窺(一) 概念

    摘要:而面向切面編程理所當(dāng)然關(guān)注于切面,那么什么是切面可以理解為程序執(zhí)行時(shí)的某個(gè)節(jié)點(diǎn),或更具體一點(diǎn),在某個(gè)方法執(zhí)行之前,執(zhí)行之后,返回之后等其它節(jié)點(diǎn)。術(shù)語(yǔ)一個(gè)切面,可以理解為一個(gè)切面模塊,將相關(guān)的增強(qiáng)內(nèi)容寫進(jìn)同一個(gè)切面。例如一個(gè)負(fù)責(zé)日志的切面。 AOP是什么 AOP全稱 Aspect-Oriented Programming 即面向切面編程。怎么樣,是不是感覺(jué)很熟悉?對(duì),類似的還有面向過(guò)程編...

    CarterLi 評(píng)論0 收藏0
  • Spring框架之我見(jiàn)(三)——IOC、AOP

    摘要:模塊負(fù)責(zé)的所有面向切面的功能??偨Y(jié)的統(tǒng)一管理,降低了對(duì)象之間的耦合對(duì)主流的框架提供了很好的集成支持提供眾多組件,事務(wù)管理,等具有高度可開放性,開發(fā)者可以自由選擇部分或全部主要使用工廠模式和代理模式。 聊完了Spring框架中最重要的兩種設(shè)計(jì)模式,我們來(lái)看一下Spring框架的模塊和結(jié)構(gòu)圖。 Spring框架的結(jié)構(gòu) 下圖是Spring官方給出的Spring框架的結(jié)構(gòu)圖。 showImg(...

    khs1994 評(píng)論0 收藏0
  • Spring理論基礎(chǔ)-面向切面編程

    摘要:序是的縮寫,中文翻譯是面向切面編程。首先面向切面編程這個(gè)名稱很容易讓人想起面向?qū)ο缶幊虂?lái)。這種動(dòng)態(tài)地將代碼織入到類的指定方法指定位置上的編程思想就是面向切面編程。概念面向切面編程具體的一些概念。 序 AOP是Aspect-Oriented Programming的縮寫,中文翻譯是面向切面編程。作為Spring的特征之一,是要好好學(xué)習(xí)的。 首先面向切面編程這個(gè)名稱很容易讓人想起面向?qū)ο缶?..

    voyagelab 評(píng)論0 收藏0
  • 從源碼入手,一文帶你讀懂Spring AOP面向切面編程

    摘要:,,面向切面編程。,切點(diǎn),切面匹配連接點(diǎn)的點(diǎn),一般與切點(diǎn)表達(dá)式相關(guān),就是切面如何切點(diǎn)。例子中,注解就是切點(diǎn)表達(dá)式,匹配對(duì)應(yīng)的連接點(diǎn),通知,指在切面的某個(gè)特定的連接點(diǎn)上執(zhí)行的動(dòng)作。,織入,將作用在的過(guò)程。因?yàn)樵创a都是英文寫的。 之前《零基礎(chǔ)帶你看Spring源碼——IOC控制反轉(zhuǎn)》詳細(xì)講了Spring容器的初始化和加載的原理,后面《你真的完全了解Java動(dòng)態(tài)代理嗎?看這篇就夠了》介紹了下...

    wawor4827 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<