日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

Spring5参考指南:SpringAOP简介

發(fā)布時(shí)間:2024/2/28 javascript 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring5参考指南:SpringAOP简介 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • AOP的概念
    • Spring AOP簡(jiǎn)介
    • Spring AOP通知類型

寫過(guò)程序的都知道OOP即面向?qū)ο缶幊獭?

從最開始的面向過(guò)程編程,到后面的面向?qū)ο缶幊?#xff0c;程序的編寫方式發(fā)生了重大的變化,面向?qū)ο缶幊虒I(yè)務(wù)邏輯封裝成一個(gè)一個(gè)的對(duì)象,所有的操作都轉(zhuǎn)換為對(duì)對(duì)象的操作。

面向?qū)ο缶幊态F(xiàn)在使用的非常普遍,一般來(lái)說(shuō)只要是高級(jí)語(yǔ)言都支持,但是它也有缺點(diǎn),比如如果我們想做一些橫跨對(duì)象的操作(如統(tǒng)計(jì)各個(gè)對(duì)象里面某個(gè)方法的執(zhí)行時(shí)間),這時(shí)候面向?qū)ο罂梢阅芰τ胁淮N覀兛赡苄枰诿總€(gè)對(duì)象里面都添加一些統(tǒng)計(jì)時(shí)間的代碼,那么有沒(méi)有更好的方法來(lái)處理這個(gè)問(wèn)題呢?

面向方面編程(AOP)通過(guò)提供對(duì)程序結(jié)構(gòu)的另一種思考方式來(lái)補(bǔ)充面向?qū)ο缶幊?#xff08;OOP)。OOP中模塊化的關(guān)鍵單元是類,而AOP中模塊化的單元是方面。方面支持跨多個(gè)類型和對(duì)象的關(guān)注點(diǎn)(如事務(wù)管理)的模塊化。(在AOP文獻(xiàn)中,這種關(guān)注通常被稱為“橫切”關(guān)注。)

AOP的概念

AOP的英文全稱是Aspect-oriented Programming (AOP) 。面向方面的編程。它有如下幾個(gè)概念:

  • 方面(Aspect):跨越多個(gè)類的模塊化關(guān)注點(diǎn)。事務(wù)管理是企業(yè)Java應(yīng)用程序中橫切關(guān)注點(diǎn)的一個(gè)很好的例子。在SpringAOP中,方面是通過(guò)使用常規(guī)類(基于模式的方法)或使用@Aspect注解(@Aspectj樣式)注解的常規(guī)類來(lái)實(shí)現(xiàn)的。

  • 連接點(diǎn)(Join point):程序執(zhí)行過(guò)程中的一點(diǎn),如方法的執(zhí)行或異常的處理。在SpringAOP中,連接點(diǎn)總是表示一個(gè)方法執(zhí)行。

  • 通知(Advice):一個(gè)方面在特定連接點(diǎn)采取的行動(dòng)。不同類型的通知包括“環(huán)繞”、“前“和”后”通知。許多AOP框架(包括Spring)將通知建模為攔截器,并在連接點(diǎn)周圍維護(hù)攔截器鏈。

  • 切點(diǎn)(Pointcut):與連接點(diǎn)匹配的謂詞。通知與切入點(diǎn)表達(dá)式關(guān)聯(lián),并在與切入點(diǎn)匹配的任何連接點(diǎn)上運(yùn)行(例如,使用特定名稱執(zhí)行方法)。pointcut表達(dá)式匹配的連接點(diǎn)概念是AOP的核心,Spring默認(rèn)使用AspectJ pointcut表達(dá)式語(yǔ)言。

  • 說(shuō)明(Introduction):代表類型聲明其他方法或字段。SpringAOP允許您向任何advised對(duì)象引入新的接口(和相應(yīng)的實(shí)現(xiàn))。例如,您可以使用一個(gè)Introduction使bean實(shí)現(xiàn)一個(gè)IsModified接口,以簡(jiǎn)化緩存。(introduction在AspectJ社區(qū)中稱為類型間聲明。)

  • 目標(biāo)對(duì)象(Target object):由一個(gè)或多個(gè)方面advised的對(duì)象。也稱為“advised 對(duì)象”。因?yàn)镾pringAOP是通過(guò)使用運(yùn)行時(shí)代理實(shí)現(xiàn)的,所以這個(gè)對(duì)象始終是一個(gè)代理對(duì)象。

  • AOP代理:由AOP框架創(chuàng)建的用于實(shí)現(xiàn)aspect contracts(通知方法執(zhí)行等)的對(duì)象。在Spring框架中,AOP代理是JDK動(dòng)態(tài)代理或CGLIB代理。

  • 編織(Weaving):將aspects與其他應(yīng)用程序類型或?qū)ο箧溄?#xff0c;以創(chuàng)建advised的對(duì)象。這可以在編譯時(shí)(例如,使用AspectJ編譯器)、加載時(shí)或運(yùn)行時(shí)完成。Spring AOP和其他純Java AOP框架一樣,在運(yùn)行時(shí)進(jìn)行編織。

Spring AOP簡(jiǎn)介

Spring AOP是純Java實(shí)現(xiàn)的。不需要特殊的編譯過(guò)程。

SpringAOP目前只支持方法上面的連接點(diǎn),并沒(méi)有實(shí)現(xiàn)字段連接。如果要實(shí)現(xiàn)這樣的功能可以考慮使用AspectJ。

面向方面的集大成者是AspectJ, 它提供了面向方面編程的非常全面的功能,SpringAOP從未試圖與AspectJ競(jìng)爭(zhēng),以提供全面的AOP解決方案。我們相信,基于代理的框架(如SpringAOP)和全面的框架(如AspectJ)都是有價(jià)值的,它們是互補(bǔ)的,而不是競(jìng)爭(zhēng)中的。Spring無(wú)縫地將SpringAOP和IOC與AspectJ集成在一起。

SpringAOP的AOP方法不同于大多數(shù)其他AOP框架。目的并不是提供最完整的AOP實(shí)現(xiàn)。相反,其目的是在AOP實(shí)現(xiàn)和SpringIOC之間提供緊密的集成,以幫助解決企業(yè)應(yīng)用程序中的常見(jiàn)問(wèn)題。

Spring AOP通知類型

Spring AOP包含以下幾種通知類型:

  • Before advice:在連接點(diǎn)之前運(yùn)行但不能阻止執(zhí)行到連接點(diǎn)的通知(除非它拋出異常)。
  • After returning advice:在連接點(diǎn)正常完成后要運(yùn)行的通知(例如,如果方法返回并且不引發(fā)異常)。
  • After throwing advice: 如果方法通過(guò)引發(fā)異常而退出,則要執(zhí)行的通知。
  • After (finally) advice:無(wú)論連接點(diǎn)退出的方式如何(正常或異常返回),都要執(zhí)行的通知。
  • Around advice:環(huán)繞連接點(diǎn)(如方法調(diào)用)的通知。這是最有力的通知。around通知可以在方法調(diào)用前后執(zhí)行自定義行為。它還負(fù)責(zé)通過(guò)返回自己的返回值或引發(fā)異常來(lái)選擇是繼續(xù)到連接點(diǎn)還是快捷地執(zhí)行通知的方法。

最常使用的是Around advice,他的功能也最強(qiáng)大。他可以實(shí)現(xiàn)其他advice的功能,但是我們建議使用功能最小的通知類型,因?yàn)檫@樣的模型更加簡(jiǎn)單,并減少你的編寫程序出錯(cuò)幾率。

更多教程請(qǐng)參考 flydean的博客

總結(jié)

以上是生活随笔為你收集整理的Spring5参考指南:SpringAOP简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。