@annotation:Spring AOP 的“精準定位器“

想象你是一位快遞員,負責給一個大型社區送快遞。社區里有幾百戶人家,但只有特定家庭需要特殊服務:

  • 普通快遞:直接放快遞柜
  • 生鮮快遞:需要冷藏處理
  • 貴重物品:需要本人簽收
  • 藥品快遞:需要優先配送

@annotation?就像你手中的智能標簽掃描器,它能精準識別每個包裹上的特殊標簽,讓你只對貼有特定標簽的包裹提供特殊服務。

一、核心概念:注解就是快遞標簽

1. 定義標簽(創建注解)

// 生鮮標簽
@Target(ElementType.METHOD) // 貼在方法上
@Retention(RetentionPolicy.RUNTIME) // 運行時可見
public @interface FreshDelivery {int storageTemp() default 4; // 冷藏溫度
}// 貴重物品標簽
public @interface ValuableItem {String signatureRequired() default "yes";
}

2. 貼標簽(方法添加注解)

public class DeliveryService {// 普通快遞(無標簽)public void deliverRegular(String address) {System.out.println("普通快遞送到" + address);}// 生鮮快遞(貼冷藏標簽)@FreshDelivery(storageTemp = 2)public void deliverFreshFood(String address) {System.out.println("生鮮送到" + address);}// 貴重物品(貼簽收標簽)@ValuableItempublic void deliverJewelry(String address) {System.out.println("珠寶送到" + address);}
}

三、@annotation?就是你的智能掃描器

@Aspect
@Component
public class DeliveryAspect {// 掃描生鮮標簽@Before("@annotation(fresh)")public void handleFresh(FreshDelivery fresh) {System.out.println("啟用冷藏箱,溫度設置為: " + fresh.storageTemp() + "℃");}// 掃描貴重物品標簽@Around("@annotation(valuable)")public Object handleValuable(ProceedingJoinPoint pjp, ValuableItem valuable) {System.out.println("要求收件人出示身份證");System.out.println("需要簽收: " + valuable.signatureRequired());try {// 執行配送return pjp.proceed();} finally {System.out.println("已確認簽收,拍照存檔");}}
}

四、工作流程:精準服務

實際配送場景:

public static void main(String[] args) {DeliveryService service = getDeliveryService(); // 獲取代理對象service.deliverRegular("A棟101"); // 普通快遞// 輸出: 普通快遞送到A棟101service.deliverFreshFood("B棟202"); // 生鮮快遞// 輸出: // 啟用冷藏箱,溫度設置為: 2℃// 生鮮送到B棟202service.deliverJewelry("C棟303"); // 貴重物品// 輸出:// 要求收件人出示身份證// 需要簽收: yes// 珠寶送到C棟303// 已確認簽收,拍照存檔
}

五、為什么需要?@annotation

問題無注解的解決方案使用?@annotation?的解決方案
精準定位按地址篩選:"B棟的都冷藏"直接掃描包裹標簽
差異化服務所有生鮮統一4℃冷藏根據標簽設置不同溫度
擴展性新增藥品配送需修改篩選規則只需新增藥品標簽
代碼耦合配送服務需要知道處理邏輯配送服務只貼標簽,不關心處理

六、@annotation?的獨特優勢

? 精確制導:像激光制導導彈一樣精準定位

? ?

// 只處理帶@MedicalDelivery標簽的方法
@Around("@annotation(MedicalDelivery)")

參數傳遞:讀取標簽上的參數

@annotation(medical) // 獲取注解實例
int priority = medical.priority(); // 讀取優先級參數

動態啟用:通過標簽開關功能

// 只有帶@EnableLogging的方法才記錄日志
@Before("@annotation(EnableLogging)")

解耦設計:業務代碼只需聲明需求

// 業務方法只需關注自己需要什么
@FreshDelivery(storageTemp=5)
public void deliverDairy() {...}

七、對比其他定位方式

1. 按樓棟配送(包路徑匹配)

// 處理com.delivery.fresh包下所有方法
@Before("execution(* com.delivery.fresh..*(..))")
  • 問題:包內可能有不需要冷藏的普通快遞

2. 按物品類型配送(接口匹配)

// 處理實現Perishable接口的類
@Before("within(com.delivery.Perishable+)")

3. 智能標簽掃描(@annotation

// 精確處理貼有@FreshDelivery標簽的方法
@Before("@annotation(FreshDelivery)")

八 、為什么它叫?@annotation

在Spring AOP中:

  • @annotation?是一個切點指示符(Pointcut Designator)
  • 它專門用于匹配帶有特定注解的方法
  • 語法:@annotation(annotation-type)
    // 掃描帶@SpecialService標簽的方法
    @Before("@annotation(com.example.SpecialService)")
    

十、總結:@annotation?的本質

它就像快遞員的智能標簽掃描器:

  1. 識別需求:掃描方法上的注解標簽
  2. 精準服務:只為帶標簽的方法提供增強
  3. 參數讀取:獲取標簽上的配置參數
  4. 解耦設計:業務代碼只需聲明需求,不關心實現

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

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

相關文章

Web Worker使用指南 解鎖瀏覽器多線程 ,提升前端性能的利器

文章目錄 前言一、什么是 Web Worker二、適用場景1、CPU 密集型計算2、圖像/視頻處理3、實時數據流處理(高頻場景)4、后臺文件操作5、復雜狀態機/AI邏輯(游戲開發)6、長輪詢與心跳檢測7、WebAssembly 加速8、WebGL 與 Canvas 渲染…

React 18.2.0 源碼打包

一、React源碼地址 GitHub:React 二、參考文章 sourcemap實戰-生成react源碼sourcemap Rollup中文文檔 JavaScript Source Map 詳解 全網最優雅的 React 源碼調試方式 三、打包操作 安裝依賴 // 全局安裝yarn npm i -g yarn // 源碼項目目錄下執行yarn安裝依賴…

UniApp 開發第一個項目

UniApp 開發第一個項目全流程指南,涵蓋環境搭建、項目創建、核心開發到調試發布,結合最新實踐整理而成,適合零基礎快速上手: ?? 一、環境準備(5分鐘) 安裝開發工具 HBuilderX(官方推薦IDE):下載 App 開發版,安裝路徑避免中文或空格 微信開發者工具(調試小程序必備…

Web項目開發中Tomcat10+所需的jar包

版權聲明 本文原創作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 項目背景 Web項目中使用低版本Tomcat時常用的jar包如下: javax.servlet-apijavax.ejb-apijavax.jms-apijavax.json-api 當Web項目使用Tomcat10的版本時&#…

網絡安全就業方向與現實發展分析:機遇、挑戰與未來趨勢

網絡安全行業的戰略地位與就業背景 在數字經濟蓬勃發展的今天,網絡安全已從技術分支演變為關乎國家安全、企業存亡和個人隱私的核心領域。根據國家網信辦數據顯示,2025年我國網絡安全人才缺口達200萬人,較2023年增長33%。這一現象源于三重驅…

iOS runtime隨筆-消息轉發機制

運行時的消息轉發分三步, 當你調用了沒有實現的方法時, 有機會通過runtime的消息轉發機制補救一下 resolveInstanceMethod/resolveClassMethod 這里可以動態去創建方法來解決CrashforwardingTargetForSelector ?????第一步未解決, 就會走到這里, 可以給出一個Target去轉發…

vue3用js+css實現輪播圖(可調整堆疊程度)

先看效果 html <divclass"outer"style"width: 650px;background: #fff;box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.1);border-radius: 15px;margin: 0 10px 15px 5px;">//這里用的是svg-icon,需要的可自行替換為其他圖片<svg-iconid"btn_l&q…

Three.js項目實戰:從零搭建小米SU7三維汽車

大家如果有過購車的經驗&#xff0c;肯定會先從網站上收集車輛的信息&#xff0c;比如懂車帝&#xff0c;汽車之家&#xff0c;這些網站上逼真的看車效果是如何實現的呢&#xff0c;這節課帶你從0-1快速的手搓一個看車小項目。 懂車帝官網 效果 視頻教程和筆記 大家可以下方小…

Android13 永久關閉SELinux 權限

永久關閉 SeLinux 在cmdline中增加參數androidboot.selinuxpermissive&#xff1b; 芯片: QCM6115 版本: Android 13 kernel: msm-4.19 ~/temp_code/SLM927D_LA.UM.9.15$ git diff device/qcom/bengal/BoardConfig.mk diff --git a/device/qcom/bengal/BoardConfig.mk b…

Linux創建DHCP服務

Linux可作為DHCP服務端使用&#xff0c;為同一個網絡下的其它機器動態分配ip。在一些情況下&#xff0c;可以起到很大的作用。 二級標題 安裝dnsmasq # ubuntu sudo apt update -y sudo apt install -y dnsmasq# centos sudo yum install -y dnsmasq修改配置文件 sudo vim …

汽車4G-TBOX智能終端 汽車國標GB/T 32960協議

汽車國標GB/T 32960協議4G TBOX是一種廣泛應用于車聯網的設備&#xff0c;下面將從不同方面為你詳細介紹。 移動管家汽車4G-TBOX智能終端定義與用途 4G TBOX是基于車聯網技術智能服務系統中的采集終端。以車云網的4G TBOX_CC750為例&#xff0c;它為整個智能服務系統提供GPS/…

JavaEE-Mybatis初階

什么是MyBatis MyBatis是?款優秀的 持久層 框架&#xff0c;?于簡化JDBC的開發。 MyBatis本是 Apache的?個開源項?iBatis&#xff0c;2010年這個項?由apache遷移到了google code&#xff0c;并 且改名為MyBatis 。2013年11?遷移到Github 創建項目時添加依賴 上面有…

記一次jvm機器問題定位經歷

背景 開發過程中發現機器指標異常&#xff0c;端口也hang住無響應&#xff0c;端口返回為timeout&#xff0c;對應探活檢測也失敗了。 現象 在st測試環節&#xff0c;突然每隔一段時間新接口就hang住無響應&#xff0c;觀察機器監控也發現端口探活失敗&#xff0c;看機器指標…

【機器學習深度學習】張量基本操作

目錄 一、張量基本操作 1.1 執行代碼 1.2 運行結果 1.3 代碼解析 ? 1. 創建張量&#xff08;tensor、randn、zeros&#xff09; ? 2. 索引與切片&#xff08;類似 NumPy&#xff09; ? 3. 形狀變換&#xff08;reshape、轉置、壓縮&#xff09; ? 4. 數學運算&#x…

【微信小程序】8、獲取用戶當前的地理位置

1、獲取當前的地理位置 獲取當前的地理位置、速度。當用戶離開小程序后&#xff0c;此接口無法調用。開啟高精度定位&#xff0c;接口耗時會增加&#xff0c;可指定 highAccuracyExpireTime 作為超時時間。 注意&#xff1a; 地圖相關使用的坐標格式應為 gcj02。高頻率調用會…

Jenkins 常用定時構建腳本

Jenkins 常用定時構建腳本 Jenkins 使用 cron 風格的語法來配置定時構建任務&#xff0c;以下是常用的定時構建腳本示例和說明&#xff1a; 基本語法 Jenkins 定時構建使用五個字段表示時間&#xff0c;格式為&#xff1a; MINUTE HOUR DOM MONTH DOWMINUTE - 分鐘 (0-59)H…

ActiveMQ漏洞復現

以下內容均在nextcyber靶場環境中完成&#xff0c;請勿用于非法途徑&#xff01; ActiveMQ 反序列化漏洞&#xff08;CVE-2015-5254&#xff09; Apache ActiveMQ是美國阿帕奇&#xff08;Apache&#xff09;軟件基金會所研發的一套開源的消息中間件&#xff0c;它支持Java消息…

環保處理設備遠程運維管理解決方案

在環保產業蓬勃發展的當下&#xff0c;環保處理設備廠商面臨著愈發激烈的市場競爭。為助力環保處理設備廠商在競爭中脫穎而出&#xff0c;御控工業智能網關打造了一套完善的PLC數據采集設備運維管理平臺解決方案。此方案憑借其獨特優勢&#xff0c;能為環保處理設備廠商帶來顯著…

嵌入式學習筆記DAY43(ARM架構)

一、RAM分類 sram&#xff08;靜態隨機存取存儲器&#xff09;&#xff1a; 原理&#xff1a;使用晶體管來存儲二進制數據0和1&#xff0c;通過雙穩態電路&#xff08;由多個晶體管組成&#xff09;來保持數據狀態&#xff0c;只要持續供電&#xff0c;數據就能穩定保存。數據讀…

2025國際無人機應用及防控大會四大技術專題深度解析

2025國際無人機應用及防控大會四大技術專題深度解析 2025國際無人機應用及防控大會四大技術專題深度解析1 無人機系統技術專題技術特點與應用領域國內領軍企業及案例風險挑戰與發展方向 2 測控與通信導航技術專題技術創新與應用突破領先企業及解決方案現存問題與發展趨勢 3 任務…