AOP 切面日志詳細

在業務方法上打注解

package com.lib.service;@Service
public class BookService {@LogExecution(description = "查詢圖書")public Book query(int id) {return repo.findById(id);}@LogExecution(description = "借閱圖書")public void borrow(int id) {// 模擬異常 50%if (Math.random() < 0.5) throw new RuntimeException("庫存不足");}
}

5. 測試 & 觀察

  1. 啟動 Tomcat

  2. 瀏覽器訪問

    • http://localhost:8080/library/book/1

    • 多刷幾次,控制臺出現:

[AOP-LOG] BookService.query | desc=查詢圖書 | cost=3 ms | status=SUCCESS
[AOP-LOG] BookService.borrow | desc=借閱圖書 | cost=1 ms | status=ERROR | msg=庫存不足

6. 多切面執行順序

再寫一個 安全切面

@Aspect
@Component
@Order(1)   // 值越小越先執行
public class SecurityAspect {@Before("@annotation(LogExecution)")public void check() {System.out.println("[SECURITY] 權限校驗通過");}
}

重啟后觀察日志順序:

[SECURITY] 權限校驗通過
[AOP-LOG] BookService.query ...

7. 底層實現速看

  1. 打開 IDEA → 雙擊 Shift → 輸入 AnnotationAwareAspectJAutoProxyCreator
    該類負責 后置處理器 生成代理。

  2. LoggingAspect.logAround() 第一行打斷點,以 Debug 模式啟動:
    調用棧能看到 CglibAopProxyDynamicAdvisedInterceptorMethodInterceptor

  3. 結論:Spring 默認使用 CGLIB 代理類(無接口也能代理),若類實現接口也可強制用 JDK 動態代理(@EnableAspectJAutoProxy(proxyTargetClass=false))。


8. 單元測試

@SpringJUnitConfig(AppConfig.class)
@EnableAspectJAutoProxy
class AopTests {@AutowiredBookService bookService;@Testvoid queryShouldPrintLog() {bookService.query(1);   // 控制臺應出現 AOP-LOG}
}

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

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

相關文章

使用paddlepaddle-Gpu庫時的一個小bug!

起初安裝的是 paddlepaddle 2.6.1版本。 用的是Taskflow的快速分詞以及ner快速識別&#xff1a;???????seg_accurate Taskflow("word_segmentation", mode"fast") ner Taskflow("ner", mode"fast")但是使用不了Gpu。想使用Gp…

量子能量泵:一種基于并聯電池與電容陣的動態直接升壓架構

量子能量泵&#xff1a;一種基于并聯電池與電容陣的動態直接升壓架構 摘要 本文提出了一種革命性的高效電源解決方案&#xff0c;通過創新性地采用并聯電池組與串聯高壓電容陣相結合的架構&#xff0c;徹底解決了低電壓、大功率應用中的升壓效率瓶頸與電池一致性難題。該方案摒…

【Linux網絡】網絡基礎概念——帶你打開網絡的大門

1. 計算機網絡背景 文章目錄1. 計算機網絡背景網絡發展2. 初識協議2.1 協議分層軟件分層的好處2.2 OSI七層模型2.3 TCP/IP五層(或四層)模型網絡發展 獨立模式 獨立模式是計算機網絡發展的最初階段&#xff0c;主要特點如下&#xff1a; 單機工作環境&#xff1a; 每臺計算機完…

簡單介紹一下Clickhouse及其引擎

一、ClickHouse 的優缺點一、ClickHouse 的優點 ? 1. 極致的查詢性能 列式存儲&#xff1a;只讀取查詢涉及的列&#xff0c;大幅減少 IO。數據壓縮&#xff1a;常見壓縮率 5~10 倍&#xff0c;減少存儲和帶寬消耗。向量化執行&#xff1a;按批次&#xff08;block&#xff09;…

【卷積神經網絡詳解與實例】8——經典CNN之VGG

1 開發背景 VGGNet是牛津大學視覺幾何組(Visual Geometry Group)提出的模型&#xff0c;該模型在2014ImageNet圖像分類與定位挑戰賽 ILSVRC-2014中取得在分類任務第二&#xff0c;定位任務第一的優異成績。其核心貢獻在于系統性地探索了網絡深度對性能的影響&#xff0c;并證明…

【分享】中小學教材課本 PDF 資源獲取指南

很多人都不知道&#xff0c;其實官方提供的中小學教材課本 PDF 文檔是完全免費且正版的&#xff0c;無需使用掃描版&#xff0c;清晰度和質量都非常高。 這些資源就藏在國家中小學智慧教育平臺&#xff08;basic.smartedu.cn&#xff09;上。這個平臺涵蓋了從小學到高中的各個…

js趣味游戲 貪吃蛇

以下是關于JavaScript趣味游戲的系統性整理&#xff0c;涵蓋經典案例、開發工具、教程資源及創意方向&#xff0c;助您快速掌握JS游戲開發的核心邏輯&#xff1a;一、經典JS趣味游戲案例貪吃蛇&#xff08;Snake Game&#xff09;核心機制&#xff1a;鍵盤控制蛇的移動方向&…

【Redis#11】Redis 在 C++ 客戶端下的安裝使用流程(一條龍服務)

一、安裝使用 --Ubuntu 下啟用 1. 前置依賴 - hiredis hiredis 是一個用 C 語言實現的 Redis 客戶端庫&#xff0c;redis-plus-plus 庫基于 hiredis 實現。在開始之前&#xff0c;請確保已安裝 libhiredis-dev&#xff0c;可以通過以下命令安裝&#xff1a; sudo apt install l…

kibana+elasticsearch console查詢示例

kibana console查詢入口如下 http://localhost:5601/app/dev_tools#/console/shell 1 整體查詢 獲取index為newbook的所有數據 GET newbook/_search 2 通用查詢 獲取index為newbook的數據中&#xff0c;bookname包含“西游”的所有數據。 GET newbook/_search { "query&q…

軟考系統架構設計師之軟件風格篇

一、軟件架構風格-數據流風格 數據-》第1步處理-》數據-》第2步處理-》數據-》第N步處理 【分步處理】 優點&#xff1a; 1、松耦合【高內聚-低耦合】 2、良好的重用性/可維護性; 3、可擴展性【標準接口適配】 4、良好的隱蔽性; 5、支持并行。 缺點 1、交互性較差; 2、復雜性較…

初始QML

由于項目原因&#xff0c;最近要進行qml相關開發&#xff0c;我之前也沒有搞過qml&#xff0c;因此開一個qml系列的專欄&#xff0c;記錄自己關于qml的相關學習新建第一個qml工程按如下圖所示方法新建一個最簡單的qml工程&#xff1a;編譯運行可以看到是一個標題為“hello word…

Coze源碼分析-資源庫-創建知識庫-基礎設施/存儲/安全

6. 基礎設施層 基礎設施層為知識庫創建功能提供底層技術支撐&#xff0c;包括數據存儲、緩存、消息隊列、文檔處理、向量化等核心服務。 6.1 數據存儲服務 6.1.1 MySQL數據庫 文件位置: backend/infra/rdb/mysql.go // MySQLConfig MySQL配置 type MySQLConfig struct {Host …

【iOS】設計模式復習

目錄 觀察者模式 通知機制 基本使用 注冊觀察者 創建一個通知 發送通知 通知與多線程 使用異步發送通知 NSNotificationQueue通知隊列 在子線程中運行觀察者函數 實現原理 named表 nameless表 wildcard表 添加觀察者 發送通知 移除通知? KVO機制 基本使用 …

RK3568 NPU :RKNN-ToolKit2環境搭建

1. 安裝Miniconda3 下載 Linux 64 位 Miniconda 最新版安裝腳本 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh安裝 Miniconda bash Miniconda3-latest-Linux-x86_64.sh -u安裝完成后會自動設置環境變量。打開新的終端&#xff0c;發現用戶名前…

Ubuntu 24.04 Server 版系統安裝及配置

Ubuntu 24.04 Server 版安裝及配置 文章目錄Ubuntu 24.04 Server 版安裝及配置一、獲取安裝文件二、虛擬機配置三、安裝界面四、配置網絡五、擴容根分區 一、獲取安裝文件二、虛擬機配置三、安裝界面 選擇English&#xff08;US&#xff09;問是否升級內核配置鍵盤手動配置ipv4…

Java 事務失效場景全解析

在 Java 開發中&#xff0c;事務管理是保證數據一致性的核心機制&#xff0c;尤其是在 Spring 框架中&#xff0c;Transactional注解的使用極大簡化了事務配置。然而&#xff0c;在實際開發中&#xff0c;事務常常會因為一些細節問題而失效&#xff0c;導致數據異常。本文將詳細…

【Coze搞錢實戰】14. 抖音直播間自動回復機器人實戰教程:三小時搭建智能客服,互動率提升150%(保姆級無代碼指南)

摘要:抖音直播間高頻問題重復回復、觀眾互動不及時是運營痛點。本文針對新手和進階用戶,提供無代碼的自動回復機器人搭建方案:新手1小時完成基礎配置(Coze+抖音對接),進階用戶通過促銷倒計時、粉絲分層、熱點借勢三大策略提升互動率150%。方案基于某女裝直播間實測數據(…

云計算核心知識梳理

云計算作為新一代信息技術的核心,其體系涵蓋特點、定義、技術演進及分類等多個維度,以下是對相關知識的系統整合與解讀。 一、云計算的核心特點 / 優勢 云計算的優勢圍繞資源利用效率、服務靈活性和管理便捷性展開,具體可拆解為五大核心特性: 按需自助服務:用戶無需人工干…

安卓13_ROM修改定制化-----安卓 13 系統 ROM 定制化與低版本系統的核心區別

安卓系統憑借其全球領先的市場占有率,開放特性為廠商和開發者提供了深度定制的空間,形成了豐富的ROM生態圈。從最初的安卓1.0到最新的安卓15,系統在功能、性能和安全方面不斷迭代升級,同時也為ROM定制帶來了新的機遇與挑戰。特別是從安卓11開始,谷歌對系統架構和安全機制進…

【Java后端】Spring Boot 2.7.x 和 Swagger 3.0.x (springfox 3.x) 的兼容性問題

springfox 在 Spring Boot 2.6 開始就有很多兼容性 bug&#xff08;主要是 Spring MVC PathPatternParser 的引入&#xff09;&#xff0c;導致在 Spring Boot 2.6/2.7 里經常出現 無法啟動 / 無法訪問 swagger-ui.html 的情況。&#x1f50e; 問題原因Spring Boot 2.6 開始默認…