AOP總結

AOP是什么

AOP是面向切面編程,其目的是將橫切關注點從核心業務代碼中分離出來,通過動態代理等方式,實現代碼的增強和解耦,使得其具有更好的可維護性和可擴展性。

其中橫切關注點是多個類或對象的公共行為,如事務管理、日志記錄、接口限流、權限控制等。

AOP解決了什么

AOP解決了在面向對象編程中,不能很好地處理一些分散的類或對象的公共行為的問題,因為在不使用AOP的情況下,每個類或對象中都需要編寫這些行為執行邏輯的代碼,導致代碼冗余、復雜難以維護,因此引入了AOP機制,將這些公共行為的邏輯代碼從核心業務代碼中分離出來。

AOP常見術語

1、橫切關注點:多個對象或方法共同行為。

2、切面:將橫切關注點封裝成類,每一個類就是一個切面。

3、連接點:方法調用或執行時的某個時刻,如方法調用、異常拋出。

4、通知:指在某個連接點處執行的具體操作,通知包含前置(@Before)、后置(@After)、異常(@AfterThrowing)、返回(@AfterReturning)、環繞(@Around)通知這五種,其中前四種在目標方法執行前后執行,環繞通知可在方法執行的過程中執行。

5、切點:是一個表達式,用于指定哪些連接點需要切面增強。

6、織入:將切面和目標對象連接起來的過程,即在切點配置的連接點處應用通知的過程,包含編譯期織入和運行期織入兩種方式。

AOP和AspectJ對比

AOP是通過動態代理實現的,屬于運行時增強,且需要依賴于Spring容器,使用javac編譯器實現。對于被代理的類,若實現了接口,則使用JDK實現動態代理,反之使用Cglib實現。使用該方法時,由于容器啟動時需要生成代理對象且在方法調用上會增加棧的深度,切面在代理中執行,因此AOP的效率相比于AspectJ來說較低。同時對于織入,僅支持方法級的織入。

AspectJ屬于編譯時增強,可單獨使用或整合到其他框架中,需要使用的編譯器為ajc。同時,其屬于靜態織入,通過修改代碼完成,在實際運行前就已經完成了對切面的織入,生成的類沒有額外的開銷。支持編譯時、編譯后、加載時織入,同時可編織字段、方法、構造函數、靜態初始值等。

多個切面優先級確定

由于切面是一個類,要使一個類為切面,首先需要對該類加上注解@Aspect,要控制多個切面執行的順序,可使用兩種方法:

1、使用@Order注解,并令注解中的值為一個數值,數值越小優先級越高;

2、實現Ordered接口,并重寫order方法,該方法返回一個整數,代表優先級的大小,數值越小優先級越高。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/16203.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/16203.shtml
英文地址,請注明出處:http://en.pswp.cn/web/16203.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2024寶藏工具EasyRecovery數據恢復軟件免費版本下載

在這個數字化的時代,數據已經成為我們生活中的重中之重。無論是工作中的重要文件,還是手機中珍貴的照片,我們都依賴著這些數據。然而,數據丟失的情況時有發生,可能是誤刪,可能是設備故障,更可能…

java-方法

在 Java 編程語言中,方法是一段用于執行特定任務的代碼。方法是面向對象編程(OOP)的基礎之一,因為它允許我們在對象上執行操作。在 Java 中,方法是類的組成部分,這意味著它們與類緊密相關。本解釋將涵蓋 Ja…

vue3和vite實現vue-router4版本路由的配置以及自動生成路由配置

這個是普通的手動路由配置:https://blog.csdn.net/weixin_68658847/article/details/130071101 自動路由配置 創建項目 npm create vitelatest my-vue-app -- --template vue // 或者 yarn create vite my-vue-app --template vue// 安裝路由 yarn add vue-route…

Ansible02-Ansible Modules模塊詳解

目錄 寫在前面4. Ansible Modules 模塊4.1 Ansible常用模塊4.1.1 Command模塊4.1.2 shell模塊4.1.3 scrpit模塊4.1.4 file模塊4.1.5 copy模塊4.1.6 lineinfile模塊4.1.7 systemd模塊4.1.8 yum模塊4.1.9 get_url模塊4.1.10 yum_repository模塊4.1.11 user模塊4.1.12 group模塊4.…

IPv4 報頭 Protocol 字段和 IPv6 報頭 Next header 字段中的 IP 協議號列表

IPv4 基本報頭(20 ~ 60 Byte) IPv6 基本報頭(40 Byte) IPv4 Header vs IPv6 Header 黃色 為 IPv6 與 IPv4 相同 紅色 為 IPv6 刪除的 藍色 為名稱不同功能相同 中青色 為新增的 Type of service Traffic Class (用于…

js知識點匯總之let const 和 var的區別

let const 和 var的區別 作用域 ES5 中的作用域有:全局作用域、函數作用域,ES6 中新增了塊級作用域。塊作用域由 { } 包括,if 語句和 for 語句里面的 { } 也屬于塊作用域。 var關鍵字 沒有塊級作用域的概念 // global scope {var a 10;…

AGI系列(2):掌握AI大模型提示詞優化術,從容應對各種提問場景

在上一篇大模型提示詞的文章中,筆者介紹一種通用提示詞優化的方法,這種方法基本上可以覆蓋大部分人的一般場景需求。 沒看到上文的讀者,可以通過如下鏈接去看下: 👉👉👉 AGI系列(1&a…

全網首發UNIAPP功能多的iapp后臺源碼

全網首發UNIAPP功能多的iapp后臺源碼,眾所周知UN Dev Assist 后臺是一款既不免費又不好用的后臺今天直接分享。 搭建教程在里面了,自己查看。 源碼下載:https://download.csdn.net/download/m0_66047725/89291994 更多資源下載:…

【Python】處理不平衡數據集的高級方法:ADASYN詳解

原諒把你帶走的雨天 在漸漸模糊的窗前 每個人最后都要說再見 原諒被你帶走的永遠 微笑著容易過一天 也許是我已經 老了一點 那些日子你會不會舍不得 思念就像關不緊的門 空氣里有幸福的灰塵 否則為何閉上眼睛的時候 又全都想起了 誰都別說 讓我一個人躲一躲 你的承諾 我竟然沒懷…

匯編原理(二)

寄存器:所有寄存器都是16位(0-15),可以存放兩個字節 AX,BX,CX,DX存放一般性數據,稱為通用寄存器 AX的邏輯結構。最大存放的數據為2的16次方減1。可分為AH和AL,兼容8位寄存器。 字:1word 2Byte…

JVM學習-Class文件結構②

訪問標識(access_flag) 在常量池后,緊跟著訪問標記,標記使用兩個字節表示,用于識別一些類或接口層次的訪問信息,包括這個Class是類還是接口,是否定義為public類型,是否定義為abstract類型,如果…

健身房會員管理系統服務預約小程序的作用是什么

擁有完美身材/減肥/鍛煉等前往健身房是個不錯的選擇,商家生意開展需要吸引同城客戶并轉化,客戶也有自己的判斷需要找到更全面的場地;完善客戶消費流程利于品牌發展和不斷獲客轉化。 運用【雨科】平臺搭建健身房管理系統小程序,多…

MySQL事務篇1:事物的四大特性(ACID)、三類數據讀取問題與隔離級別

一、什么是事務? MySQL的事務(Transaction)是一組由數據庫管理系統(DBMS)執行的一個或多個SQL語句的集合,這些SQL語句作為一個單獨的工作單元執行。事務的主要目的是確保數據庫的一致性和完整性&#xff0c…

藍橋杯2023(十四屆)省賽——飛機降落(雙馬尾DFS)

飛機降落(DFS) 藍橋杯2023年第十四屆省賽真題-飛機降落 - C語言網 (dotcpp.com) 一開始我是真的沒想到用DFS做,我還在想用什么策略排序呢。需要再刷!!! 雙馬尾的意思其實是刷了兩次... 一刷&#xff1a…

leecode 637 二叉樹的層平均值

leetcode 二叉樹相關-層序遍歷專題 二叉樹的層序遍歷一般來說,我們是利用隊列來實現的,先把根節點入隊,然后在出隊后將其對應的子節點入隊,然后往復此種操作。相比于二叉樹的遍歷遞歸,層序遍歷比較簡單,有…

CHI協議_1

作者:someone鏈接:https://www.zhihu.com/question/304259901/answer/3455648666來源。 1. AMBA CHI簡介 一致性總線接口(CHI)是AXI一致性擴展(ACE)協議的演進。它是Arm的AMBA總線的一部分。AMBA是一種免…

美團Java社招面試題真題,最新面試題

如何處理Java中的內存泄露? 1、識別泄露: 使用內存分析工具(如Eclipse Memory Analyzer Tool、VisualVM)來識別內存泄露的源頭。 2、代碼審查: 定期進行代碼審查,關注靜態集合類屬性和監聽器注冊等常見內…

VueJS ReactJS實現AI問答小助手(2)——流式TTS文字轉實時語音播放

TTS(Text-to-speech)文字轉語音使用的是阿里云的服務,文檔地址: https://help.aliyun.com/zh/isi/developer-reference/streaming-text-tts-wss 文檔只給出了一些配置項的說明,以及java端的代碼示例,但沒有web端的。所以這篇筆記可以給web開發者參考。 首先,AI答復的消息…

.NET File Upload

VS2022 .NET8 &#x1f4be;基礎上傳示例 view {ViewData["Title"] "File Upload"; }<h1>ViewData["Title"]</h1><form method"post" enctype"multipart/form-data" action"/Home/UploadFile"…

Android 系統日志(Log) JNI實現流程源碼分析

1、JNI概述 Java Native Interface (JNI) 是一種編程框架&#xff0c;使得Java代碼能夠與用其他編程語言&#xff08;如C和C&#xff09;編寫的本地代碼進行交互。JNI允許Java代碼調用本地代碼的函數&#xff0c;也允許本地代碼調用Java代碼的函數。下面是對JNI機制的詳細概述…