<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

        面向切面編程(AOP)的理解_javascript技巧

        來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 21:37:48
        文檔

        面向切面編程(AOP)的理解_javascript技巧

        面向切面編程(AOP)的理解_javascript技巧:在傳統(tǒng)的編寫業(yè)務(wù)邏輯處理代碼時(shí),我們通常會(huì)習(xí)慣性地做幾件事情:日志記錄、事務(wù)控制及權(quán)限控制等,然后才是編寫核心的業(yè)務(wù)邏輯處理代碼。當(dāng)代碼編寫完成回頭再看時(shí),不禁發(fā)現(xiàn),揚(yáng)揚(yáng)灑灑上百行代碼中,真正用于核心業(yè)務(wù)邏輯處理才那么幾行,如圖6-4所示。方
        推薦度:
        導(dǎo)讀面向切面編程(AOP)的理解_javascript技巧:在傳統(tǒng)的編寫業(yè)務(wù)邏輯處理代碼時(shí),我們通常會(huì)習(xí)慣性地做幾件事情:日志記錄、事務(wù)控制及權(quán)限控制等,然后才是編寫核心的業(yè)務(wù)邏輯處理代碼。當(dāng)代碼編寫完成回頭再看時(shí),不禁發(fā)現(xiàn),揚(yáng)揚(yáng)灑灑上百行代碼中,真正用于核心業(yè)務(wù)邏輯處理才那么幾行,如圖6-4所示。方

        在傳統(tǒng)的編寫業(yè)務(wù)邏輯處理代碼時(shí),我們通常會(huì)習(xí)慣性地做幾件事情:日志記錄、事務(wù)控制及權(quán)限控制等,然后才是編寫核心的業(yè)務(wù)邏輯處理代碼。當(dāng)代碼編寫完成回頭再看時(shí),不禁發(fā)現(xiàn),揚(yáng)揚(yáng)灑灑上百行代碼中,真正用于核心業(yè)務(wù)邏輯處理才那么幾行,如圖6-4所示。方法復(fù)方法,類復(fù)類,就這樣子帶著無可奈何遺憾地度過了多少個(gè)春秋。這倒也罷,倘若到了項(xiàng)目的尾聲,突然決定在權(quán)限控制上需要進(jìn)行大的變動(dòng)時(shí),成千上萬個(gè)方法又得一一"登門拜訪",痛苦"雪上加霜"。


        如果能把圖6-4中眾多方法中的所有共有代碼全部抽取出來,放置到某個(gè)地方集中管理,然后在具體運(yùn)行時(shí),再由容器動(dòng)態(tài)織入這些共有代碼的話,最起碼可以解決兩個(gè)問題:

        Java EE程序員在編寫具體的業(yè)務(wù)邏輯處理方法時(shí),只需關(guān)心核心的業(yè)務(wù)邏輯處理,既提高了工作效率,又使代碼變更簡潔優(yōu)雅。

        在日后的維護(hù)中由于業(yè)務(wù)邏輯代碼與共有代碼分開存放,而且共有代碼是集中存放的,因此使維護(hù)工作變得簡單輕松。

        面向切面編程AOP技術(shù)就是為解決這個(gè)問題而誕生的,切面就是橫切面,如圖6-5所示,代表的是一個(gè)普遍存在的共有功能,例如,日志切面、權(quán)限切面及事務(wù)切面等。

        下面我們以用戶管理業(yè)務(wù)邏輯組件UserService的AOP實(shí)現(xiàn)過程(見圖6-6)為例,深度剖析一下AOP技術(shù)的實(shí)現(xiàn)原理。AOP技術(shù)是建立在Java語言的反射機(jī)制與動(dòng)態(tài)代理機(jī)制之上的。業(yè)務(wù)邏輯組件在運(yùn)行過程中,AOP容器會(huì)動(dòng)態(tài)創(chuàng)建一個(gè)代理對(duì)象供使用者調(diào)用,該代理對(duì)象已經(jīng)按Java EE程序員的意圖將切面成功切入到目標(biāo)方法的連接點(diǎn)上,從而使切面的功能與業(yè)務(wù)邏輯的功能同時(shí)得以執(zhí)行。從原理上講,調(diào)用者直接調(diào)用的其實(shí)是AOP容器動(dòng)態(tài)生成的代理對(duì)象,再由代理對(duì)象調(diào)用目標(biāo)對(duì)象完成原始的業(yè)務(wù)邏輯處理,而代理對(duì)象則已經(jīng)將切面與業(yè)務(wù)邏輯方法進(jìn)行了合成。

        現(xiàn)將圖6-6中涉及到的一些概念解釋如下。

        切面(Aspect):其實(shí)就是共有功能的實(shí)現(xiàn)。如日志切面、權(quán)限切面、事務(wù)切面等。在實(shí)際應(yīng)用中通常是一個(gè)存放共有功能實(shí)現(xiàn)的普通Java類,之所以能被AOP容器識(shí)別成切面,是在配置中指定的。

        通知(Advice):是切面的具體實(shí)現(xiàn)。以目標(biāo)方法為參照點(diǎn),根據(jù)放置的地方不同,可分為前置通知(Before)、后置通知(AfterReturning)、異常通知(AfterThrowing)、最終通知(After)與環(huán)繞通知(Around)5種。在實(shí)際應(yīng)用中通常是切面類中的一個(gè)方法,具體屬于哪類通知,同樣是在配置中指定的。

        連接點(diǎn)(Joinpoint):就是程序在運(yùn)行過程中能夠插入切面的地點(diǎn)。例如,方法調(diào)用、異常拋出或字段修改等,但Spring只支持方法級(jí)的連接點(diǎn)。

        切入點(diǎn)(Pointcut):用于定義通知應(yīng)該切入到哪些連接點(diǎn)上。不同的通知通常需要切入到不同的連接點(diǎn)上,這種精準(zhǔn)的匹配是由切入點(diǎn)的正則表達(dá)式來定義的。

        目標(biāo)對(duì)象(Target):就是那些即將切入切面的對(duì)象,也就是那些被通知的對(duì)象。這些對(duì)象中已經(jīng)只剩下干干凈凈的核心業(yè)務(wù)邏輯代碼了,所有的共有功能代碼等待AOP容器的切入。

        代理對(duì)象(Proxy):將通知應(yīng)用到目標(biāo)對(duì)象之后被動(dòng)態(tài)創(chuàng)建的對(duì)象。可以簡單地理解為,代理對(duì)象的功能等于目標(biāo)對(duì)象的核心業(yè)務(wù)邏輯功能加上共有功能。代理對(duì)象對(duì)于使用者而言是透明的,是程序運(yùn)行過程中的產(chǎn)物。

        織入(Weaving):將切面應(yīng)用到目標(biāo)對(duì)象從而創(chuàng)建一個(gè)新的代理對(duì)象的過程。這個(gè)過程可以發(fā)生在編譯期、類裝載期及運(yùn)行期,當(dāng)然不同的發(fā)生點(diǎn)有著不同的前提條件。譬如發(fā)生在編譯期的話,就要求有一個(gè)支持這種AOP實(shí)現(xiàn)的特殊編譯器;發(fā)生在類裝載期,就要求有一個(gè)支持AOP實(shí)現(xiàn)的特殊類裝載器;只有發(fā)生在運(yùn)行期,則可直接通過Java語言的反射機(jī)制與動(dòng)態(tài)代理機(jī)制來動(dòng)態(tài)實(shí)現(xiàn)。

        以下是補(bǔ)充:

        AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預(yù)編譯方式和運(yùn)行期動(dòng)態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)。

          AOP與OOP是面向不同領(lǐng)域的兩種設(shè)計(jì)思想。

          OOP(面向?qū)ο缶幊蹋┽槍?duì)業(yè)務(wù)處理過程的實(shí)體及其屬性和行為進(jìn)行抽象封裝,以獲得更加清晰高效的邏輯單元?jiǎng)澐帧?/p>

          AOP則是針對(duì)業(yè)務(wù)處理過程中的切面進(jìn)行提取,它所面對(duì)的是處理過程中的某個(gè)步驟或階段,以獲得邏輯過程中各部分之間低耦合性的隔離效果。

          我們可以單單從上面的字面上來理解AOP和OOP的話,用下面的理解也不為過:

          OOP實(shí)際上是對(duì)對(duì)象的屬性和行為的封裝,而AOP對(duì)于這點(diǎn)就無從談起,但是AOP是處理某個(gè)步驟和階段的,從中進(jìn)行切面的提取,也就是說,如果幾個(gè)或更多個(gè)邏輯過程中,有重復(fù)的操作行為,AOP就可以提取出來,運(yùn)用動(dòng)態(tài)代理,實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù),這么說來可能太含蓄,如果說到權(quán)限判斷,日志記錄等,可能就明白了。如果我們單純使用OOP,那么權(quán)限判斷怎么辦?在每個(gè)操作前都加入權(quán)限判斷?日志記錄怎么辦?在每個(gè)方法里的開始、結(jié)束、異常的地方手動(dòng)添加日志?所有,如果使用AOP就可以借助代理完成這些重復(fù)的操作,就能夠在邏輯過程中,降低各部分之間的耦合了。二者揚(yáng)長補(bǔ)短,互相結(jié)合最好。

          下面詳細(xì)了解一些AOP的概念:

        •方面(Aspect):一個(gè)關(guān)注點(diǎn)的模塊化,這個(gè)關(guān)注點(diǎn)實(shí)現(xiàn)可能另外橫切多個(gè)對(duì)象。事務(wù)管理是J2EE應(yīng)用中一個(gè)很好的橫切關(guān)注點(diǎn)例子。方面用Spring的Advisor或攔截器實(shí)現(xiàn)。
        •連接點(diǎn)(Joinpoint):程序執(zhí)行過程中明確的點(diǎn),如方法的調(diào)用或特定的異常被拋出。
        •通知(Advice):在特定的連接點(diǎn),AOP框架執(zhí)行的動(dòng)作。各種類型的通知包括“around”、“before”和“throws”通知。通知類型將在下面討論。許多AOP框架包括Spring都是以攔截器做通知模型,維護(hù)一個(gè)“圍繞”連接點(diǎn)的攔截器鏈。
        •切入點(diǎn)(Pointcut):指定一個(gè)通知將被引發(fā)的一系列連接點(diǎn)的集合。AOP框架必須允許開發(fā)者指定切入點(diǎn),例如,使用正則表達(dá)式。
        •引入(Introduction):添加方法或字段到被通知的類。Spring允許引入新的接口到任何被通知的對(duì)象。例如,你可以使用一個(gè)引入使任何對(duì)象實(shí)現(xiàn)IsModified接口,來簡化緩存。
        •目標(biāo)對(duì)象(Target Object):包含連接點(diǎn)的對(duì)象,也被稱作被通知或被代理對(duì)象。
        •AOP代理(AOP Proxy):AOP框架創(chuàng)建的對(duì)象,包含通知。在Spring中,AOP代理可以是JDK動(dòng)態(tài)代理或CGLIB代理。
        •編織(Weaving):組裝方面來創(chuàng)建一個(gè)被通知對(duì)象。這可以在編譯時(shí)完成(例如使用AspectJ編譯器),也可以在運(yùn)行時(shí)完成。Spring和其他純Java AOP框架一樣,在運(yùn)行時(shí)完成織入。
          Spring 中 AOP 代理由 Spring 的 IoC 容器負(fù)責(zé)生成、管理,其依賴關(guān)系也由 IoC 容器負(fù)責(zé)管理。至于Spring的AOP在項(xiàng)目中具體是怎么實(shí)現(xiàn)的,下篇博客會(huì)以日志記錄為例進(jìn)行學(xué)習(xí)。

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        面向切面編程(AOP)的理解_javascript技巧

        面向切面編程(AOP)的理解_javascript技巧:在傳統(tǒng)的編寫業(yè)務(wù)邏輯處理代碼時(shí),我們通常會(huì)習(xí)慣性地做幾件事情:日志記錄、事務(wù)控制及權(quán)限控制等,然后才是編寫核心的業(yè)務(wù)邏輯處理代碼。當(dāng)代碼編寫完成回頭再看時(shí),不禁發(fā)現(xiàn),揚(yáng)揚(yáng)灑灑上百行代碼中,真正用于核心業(yè)務(wù)邏輯處理才那么幾行,如圖6-4所示。方
        推薦度:
        標(biāo)簽: javascript 的理解 aop
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 99精品免费观看| 国产拍拍拍无码视频免费| 猫咪社区免费资源在线观看| 久久亚洲精品中文字幕| 50岁老女人的毛片免费观看| 亚洲日韩乱码中文无码蜜桃| 未满十八18禁止免费无码网站 | 老司机午夜性生免费福利| 国产精品美女自在线观看免费| 自拍偷区亚洲国内自拍| 日本一道本高清免费| 香港特级三A毛片免费观看| 亚洲阿v天堂在线2017免费| 久久久精品视频免费观看| 亚洲午夜国产精品无码老牛影视| 四虎国产精品免费永久在线| 久久亚洲国产成人亚| 日本免费网址大全在线观看 | 成人午夜亚洲精品无码网站| 国产精品免费久久| 久久精品国产亚洲AV麻豆不卡 | 猫咪www免费人成网站| 亚洲精品亚洲人成人网| 免费人妻无码不卡中文字幕系| 亚洲剧场午夜在线观看| 免费日韩在线视频| 国内少妇偷人精品视频免费| 国产成人亚洲精品| 亚洲成?Ⅴ人在线观看无码| 最近免费mv在线观看动漫| 国产91在线|亚洲| 亚洲伊人成无码综合网| 人妻无码一区二区三区免费| 亚洲av成本人无码网站| 亚洲精品夜夜夜妓女网| 成人毛片免费观看视频在线| 中文字幕免费观看视频| 国产.亚洲.欧洲在线| 伊伊人成亚洲综合人网7777| 在线天堂免费观看.WWW| 精品久久久久久国产免费了|