【Spring Boot AOP通知順序】

文章目錄

  • 一、Spring Boot AOP簡介
  • 二、通知順序
    • 1. 通知類型及其順序
      • 示例代碼
    • 2. 控制通知順序
      • 示例代碼


一、Spring Boot AOP簡介

AOP(Aspect-Oriented Programming,面向切面編程)是對OOP(Object-Oriented Programming,面向對象編程)的補充。AOP通過預編譯方式和運行期動態代理實現在不修改源代碼的情況下給程序動態統一添加功能的一種技術。

在Spring Boot中,AOP主要通過注解和AspectJ來實現。主要的AOP注解有:

  • @Aspect:定義切面類
  • @Before:前置通知
  • @After:后置通知
  • @AfterReturning:返回通知
  • @AfterThrowing:異常通知
  • @Around:環繞通知

二、通知順序

1. 通知類型及其順序

在Spring AOP中,通知按以下順序執行:

  1. @Around(環繞通知)前半部分
  2. @Before(前置通知)
  3. 被代理的方法執行
  4. @AfterReturning(返回通知)或@AfterThrowing(異常通知)
  5. @After(后置通知)
  6. @Around(環繞通知)后半部分

示例代碼

@Aspect
@Component
public class LoggingAspect {@Before("execution(* com.example.service.*.*(..))")public void logBefore(JoinPoint joinPoint) {System.out.println("logBefore() is running!");}@After("execution(* com.example.service.*.*(..))")public void logAfter(JoinPoint joinPoint) {System.out.println("logAfter() is running!");}@AfterReturning(pointcut = "execution(* com.example.service.*.*(..))", returning = "result")public void logAfterReturning(JoinPoint joinPoint, Object result) {System.out.println("logAfterReturning() is running!");}@AfterThrowing(pointcut = "execution(* com.example.service.*.*(..))", throwing = "error")public void logAfterThrowing(JoinPoint joinPoint, Throwable error) {System.out.println("logAfterThrowing() is running!");}@Around("execution(* com.example.service.*.*(..))")public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {System.out.println("logAround() before is running!");Object result = joinPoint.proceed();System.out.println("logAround() after is running!");return result;}
}

2. 控制通知順序

在不同的切面之間定義通知的執行順序。可以使用@Order注解。

示例代碼

@Aspect
@Order(1)
@Component
public class FirstAspect {@Before("execution(* com.example.service.*.*(..))")public void beforeAdvice() {System.out.println("FirstAspect beforeAdvice()");}
}@Aspect
@Order(2)
@Component
public class SecondAspect {@Before("execution(* com.example.service.*.*(..))")public void beforeAdvice() {System.out.println("SecondAspect beforeAdvice()");}
}

FirstAspectbeforeAdvice會先于SecondAspectbeforeAdvice執行。

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

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

相關文章

使用Dockerfile構建鏡像 使用docker-compose 一鍵部署IM項目

本文講解:使用Dockerfile構建鏡像 & 使用docker-compose 一鍵部署IM項目。 im項目地址:xzll-im ,歡迎志同道合的開發者 一起 維護,學習,歡迎star 😄 1、Dockerfile編寫與鏡像構建&容器運行 Dockerf…

Spring Boot中使用Thymeleaf進行頁面渲染

Spring Boot中使用Thymeleaf進行頁面渲染 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿!今天我們將探討如何在Spring Boot應用中使用Thymeleaf模板引擎進行頁面…

Nginx和CDN運用

一.Web緩存代理 1.工作機制 代替客戶機向網站請求數據,從而可以隱藏用戶的真實IP地址。將獲得的網頁數據(靜態Web元素)保存到緩存中并發送給客戶機,以便下次請求相同的數據時快速響應。 2.代理服務器的概念 代理服務器是一個位…

Kubernetes面試整理-如何監控Kubernetes集群的健康和性能?

監控 Kubernetes 集群的健康和性能是確保集群穩定運行的重要任務。以下是一些常用的方法和工具來監控 Kubernetes 集群: 1. Prometheus 和 Grafana Prometheus 是一個開源的系統監控和報警工具,Grafana 是一個開源的分析和監控平臺。兩者通常一起使用來監控 Kubernetes 集群。…

k8s token加新節點

在 master 節點執行 kubeadm token create --print-join-command得到token和cert,這兩個參數在2個小時內可以重復使用,超過以后就得再次生成 kubeadm join apiserver.k8s.com --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha…

【入門】5分鐘了解卷積神經網絡CNN是什么

本文來自《老餅講解-BP神經網絡》https://www.bbbdata.com/ 目錄 一、卷積神經網絡的結構1.1.卷積與池化的作用2.2.全連接層的作用 二、卷積神經網絡的運算2.1.卷積層的運算2.2.池化的運算2.3.全連接層運算 三、pytorch實現一個CNN例子3.1.模型的搭建3.2.CNN完整訓練代碼 CNN神…

【Dison夏令營 Day 04】如何用 Python 編寫簡單的數字猜謎游戲代碼

上個周末,我整理了一份可以用 Python 編寫的游戲列表。但為什么呢? 如果您是 Python 程序員初學者,編寫有趣的游戲可以幫助您更快更好地學習 Python 語言,而不會被語法之類的東西所困擾。我在學習 Python 的時候曾制作過一些這樣…

Hadoop-03-Hadoop集群 免密登錄 超詳細 3節點公網云 分發腳本 踩坑筆記 SSH免密 服務互通 集群搭建 開啟ROOT

章節內容 上一節完成: HDFS集群XML的配置MapReduce集群XML的配置Yarn集群XML的配置統一權限DNS統一配置 背景介紹 這里是三臺公網云服務器,每臺 2C4G,搭建一個Hadoop的學習環境,供我學習。 之前已經在 VM 虛擬機上搭建過一次&…

短視頻矩陣系統搭建APP源碼開發

前言 短視頻矩陣系統不僅有助于提升品牌影響力和營銷效率,還能幫助企業更精準地觸達目標受眾,增強用戶互動,并利用數據分析來持續優化營銷策略。 一、短視頻矩陣系統是什么? 短視頻矩陣系統是一種通過多個短視頻平臺進行內容創作…

Vue 3 實戰教程(快速入門)

Vue 3 實戰教程(快速入門) Vue.js 是一個用于構建用戶界面的漸進式框架,Vue 3 是 Vue 的最新版本,帶來了許多改進和新特性。本文將通過一個簡單的項目示例,帶你快速入門 Vue 3 的基礎使用。 環境設置 安裝 Node.js …

多多代播24小時值守:電商直播時代是帶貨爆單的關鍵

在電商直播盛行的今天,直播帶貨已成為品牌與消費者溝通的關鍵。然而,流量波動大,競爭激烈,使品牌面臨諸多挑戰。因此,許多品牌尋求專業代播服務,并特別強調24小時值守的重要性。 流量來源的不穩定性是一個顯…

《VUE.js 實戰》讀書筆記

1. 初識vue.js MVVM模式從MVC模式演化而來,但是MVVM模式更多應用在前端,MVC則是前后端共同表現。傳統開發模式:jQuery RequireJS ( SeaJS ) artTemplate ( doT ) Gulp ( Grunt)。vue.js可以直接通過script引入方式開發,也可以…

Linux下安裝RocketMQ:從零開始的消息中間件之旅

感謝您閱讀本文,歡迎“一鍵三連”。作者定會不負眾望,按時按量創作出更優質的內容。 ?? 1. 畢業設計專欄,畢業季咱們不慌,上千款畢業設計等你來選。 RocketMQ是一款分布式消息中間件,具有高吞吐量、低延遲、高可用性…

本末倒置!做660+880一定要避免出現這3種情況!

每年都有不少人做過660題,但是做過之后,并沒有真正理解其中的題目,所以做過之后效果也不好!再去做880題,做的也會比較吃力。 那該怎么辦呢,不建議你繼續做880題,先把660給吃透再說。 接下來給…

PostgreSQL使用教程

安裝 PostgreSQL 您可以從 PostgreSQL 官方網站下載適合您操作系統的安裝程序,并按照安裝向導進行安裝。 啟動數據庫服務器 安裝完成后,根據您的操作系統,通過相應的方式啟動數據庫服務器。 連接到數據庫 可以使用命令行工具(如 p…

Objective-C使用塊枚舉的細節

對元素類型的要求 在 Objective-C 中,NSArray 只能存儲對象類型,而不能直接存儲基本類型(例如 int)。但是,可以將基本類型封裝在 NSNumber 等對象中,然后將這些對象存儲在 NSArray 中。這樣,en…

Maven編譯打包時報“PKIX path building failed”異常

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 方法11.報錯信息2.InstallCert.java3.生成證書文件 jssecacerts4.復制 jssecacerts 文件5. 然后重啟Jenkins 或者maven即可 方法21.下載證書2. 導入證書執行keytool…

7.優化算法之分治-快排歸并

0.分治 分而治之 1.顏色分類 75. 顏色分類 - 力扣(LeetCode) 給定一個包含紅色、白色和藍色、共 n 個元素的數組 nums ,原地對它們進行排序,使得相同顏色的元素相鄰,并按照紅色、白色、藍色順序排列。 我們使用整數…

Elasticsearch (1):ES基本概念和原理簡單介紹

Elasticsearch(簡稱 ES)是一款基于 Apache Lucene 的分布式搜索和分析引擎。隨著業務的發展,系統中的數據量不斷增長,傳統的關系型數據庫在處理大量模糊查詢時效率低下。因此,ES 作為一種高效、靈活和可擴展的全文檢索…

PHP爬蟲類的使用技巧與注意事項

php爬蟲類的使用技巧與注意事項 隨著互聯網的迅猛發展,大量的數據被不斷地生成和更新。為了方便獲取和處理這些數據,爬蟲技術應運而生。PHP作為一種廣泛應用的編程語言,也有許多成熟且強大的爬蟲類庫可供使用。在本文中,我們將介…