溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

什么叫做AOP的概述

發(fā)布時(shí)間:2021-10-14 17:13:35 來源:億速云 閱讀:129 作者:柒染 欄目:編程語言

什么叫做AOP的概述,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。

  在前面的案例中我么需要自己創(chuàng)建ApplicationContext對(duì)象,然后在調(diào)用getBean來獲取需要測(cè)試的Bean

  Spring提供了一種更加方便的方式來創(chuàng)建測(cè)試所需的ApplicationContext,并且可以幫助我們把需要測(cè)試的Bean直接注入到測(cè)試類中

AOP概念

  在軟件業(yè),AOP為AspectOrientedProgramming的縮寫,翻譯為:面向切面編程,通過預(yù)編譯方式和運(yùn)行期動(dòng)態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)。AOP是OOP的延續(xù),是軟件開發(fā)中的一個(gè)熱點(diǎn),也是Spring框架中的一個(gè)重要內(nèi)容,是函數(shù)式編程的一種衍生范型。利用AOP可以對(duì)業(yè)務(wù)邏輯的各個(gè)部分進(jìn)行隔離,從而使得業(yè)務(wù)邏輯各部分之間的耦合度降低,提高程序的可重用性,同時(shí)提高了開發(fā)的效率。

為什么需要AOP

  在項(xiàng)目開發(fā)中我們經(jīng)常遇到一系列通用需求比如:權(quán)限控制,日志輸出,事務(wù)管理,數(shù)據(jù)統(tǒng)計(jì)等,這寫看似簡(jiǎn)單的需求,在實(shí)際開發(fā)中卻會(huì)帶來麻煩。

再看AOP

  我們先不考慮如何解決這些問題,其實(shí)AOP之所以出現(xiàn)就是因?yàn)?我們需要對(duì)一些已經(jīng)存在的方法進(jìn)行功能擴(kuò)展,但是又不能通過修改源代碼或改變調(diào)用方式的手段來解決

  反過來說就是要在保證不修改源代碼以及調(diào)用方式不變的情況下為原本的方法增加功能

  而由于需要擴(kuò)展的方法有很多,于是把這些方法稱作一個(gè)切面,即切面就是一系列需要擴(kuò)展功能的方法的集合

AOP的目的

  將日志記錄,性能統(tǒng)計(jì),安全控制,事務(wù)處理,異常處理等重復(fù)代碼從業(yè)務(wù)邏輯代碼中劃分出來,通過對(duì)這些行為的分離,我們希望可以將它們獨(dú)立到非業(yè)務(wù)邏輯的方法中,進(jìn)而改變這些行為的時(shí)候不會(huì)影響業(yè)務(wù)邏輯的代碼。

  直接看名字的確是比較抽象的,沒辦法,當(dāng)你創(chuàng)造了一個(gè)全新的東西時(shí),你往往也會(huì)想給它取一個(gè)nb的名字,而這個(gè)解決方案是針對(duì)一些固定場(chǎng)景的,我們很難找到一個(gè)非常準(zhǔn)確的名字去描述這個(gè)方案

AOP的相關(guān)術(shù)語

  AOP這一概念是AOP聯(lián)盟aopalliance提出的,相關(guān)的概念也出自aopalliance定義

  連接點(diǎn)(joinpoint)

  是擴(kuò)展內(nèi)容與原有內(nèi)容的交互的點(diǎn),可以理解為可以被擴(kuò)展的地方,通常是一個(gè)方法,而AspectJ中也支持屬性作為連接點(diǎn)

  示例:案例中的三個(gè)方法

  切點(diǎn)(pointcut)

  切點(diǎn)指的是要被擴(kuò)展(增加了功能)的內(nèi)容,包括方法或?qū)傩?joinpoint)

  示例:案例中的兩個(gè)增加了功能的方法

  通知(adivce)

  通知指的是要在切點(diǎn)上增加的功能

  按照?qǐng)?zhí)行時(shí)機(jī)不同分為:

  前置,后置,異常,最終,環(huán)繞,引介

  引介通知指的是在不修改類代碼的前提下,為類增加方法或?qū)傩?了解即可非重點(diǎn))

  示例:上述案例中的輸出執(zhí)行時(shí)間功能

  目標(biāo)(target)

  目標(biāo)就是要應(yīng)用通知的對(duì)象,即要被增強(qiáng)的對(duì)象

  示例:上述案例中的userDao

  織入(weaving)

  織入是一個(gè)動(dòng)詞,描述的是將擴(kuò)展功能應(yīng)用到target的這個(gè)過程

  示例:案例中修改源代碼的過程

  代理(proxy)

  Spring是使用代理來完成AOP,對(duì)某個(gè)對(duì)象增強(qiáng)后就得到一個(gè)代理對(duì)象;

  SpringAOP的整個(gè)過程就是對(duì)target應(yīng)用advice最后產(chǎn)生proxy,我們最后使用的都是proxy對(duì)象;貍貓換太子,偷梁換柱;

  切面(aspect)

  是切入點(diǎn)和通知的結(jié)合切面,是一個(gè)抽象概念;一個(gè)切面指的是所有應(yīng)用了同一個(gè)通知的切入點(diǎn)的集合

關(guān)于什么叫做AOP的概述問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問一下細(xì)節(jié)
推薦閱讀:
  1. openstack概述
  2. json 概述

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

aop
AI