springboot~aop方法攔截Aspect和InvocationHandler的理解

来源:https://www.cnblogs.com/lori/archive/2023/09/06/17681340.html
-Advertisement-
Play Games

在 Spring 中,`@Autowired` 註解的使用在不同的上下文中會產生不同的效果,這取決於所在的組件或類是否由**Spring**管理。 1. **`@Aspect` 註解的使用**:`@Aspect` 註解通常用於聲明切麵,而切麵是 Spring 管理的組件。因此,`@Autowired ...


在 Spring 中,@Autowired 註解的使用在不同的上下文中會產生不同的效果,這取決於所在的組件或類是否由Spring管理。

  1. @Aspect 註解的使用@Aspect 註解通常用於聲明切麵,而切麵是 Spring 管理的組件。因此,@Autowired 註解可以直接用於切麵類,以註入其他 Spring 托管的 bean。Spring AOP通過代理機制實現,切麵類被 Spring 托管,因此可以利用 Spring 的依賴註入功能。

    @Aspect
    @Component
    public class MyAspect {
        @Autowired
        private MyService myService;
    
        // ...
    }
    
  2. InvocationHandler 介面的實現類InvocationHandler 介面的實現類通常不是由 Spring 管理的,它們是標準 Java 類。在這種情況下,Spring 的依賴註入機制不會自動生效,因為 Spring 無法感知和管理這些類。如果你在 InvocationHandler 實現類中需要依賴註入的功能,你需要手動註入依賴或者在創建代理對象時進行註入。

    public class MyInvocationHandler implements InvocationHandler {
        private final MyService myService;
    
        public MyInvocationHandler(MyService myService) {
            this.myService = myService;
        }
    
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            // 在這裡可以使用註入的 myService
            myService.doSomething();
            // ...
        }
    }
    

總之,差異在於組件是否由 Spring 管理。Spring 管理的組件可以利用 @Autowired 註解來實現依賴註入,而標準 Java 類通常需要手動註入依賴。@Aspect 註解的類通常是由 Spring 管理的,因此可以使用 @Autowired 註解來註入其他組件。而 InvocationHandler 介面的實現類通常不是由 Spring 管理的,所以不能直接使用 @Autowired 註解。

作者:倉儲大叔,張占嶺,
榮譽:微軟MVP
QQ:853066980

支付寶掃一掃,為大叔打賞!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近又是一輪代碼review , 發現了一些實現去重的代碼,在使用 list.contain ...... ![](https://img2023.cnblogs.com/other/1218593/202309/1218593-20230906151256318-1035375358.png) 我 ...
  • 在日常開發中,當需要給一個現有類添加附加職責,而又不能採用生成子類的方法進行擴充時。例如,該類被隱藏或者該類是終極類或者採用繼承方式會產生大量的子類。這時候,我們該怎麼辦呢?我們可以使用裝飾器器模式來解決這個問題,**本文將從以下四個方面講解裝飾器器模式**。 - 簡介 - 優缺點 - 應用場景 - ...
  • 掩碼是一串二進位代碼對目標欄位進行位與運算 # 掩碼 掩碼通常是一個用於屏蔽或隱藏某些位的值,以便在計算中只關註感興趣的位。掩碼通常是一個由二進位位組成的數,用於按位與操作,以清除或保留某些位的值。 常見的用途包括: 1. **位操作和位掩碼**:在電腦編程中,位掩碼用於執行位操作,如按位與(AN ...
  • > 關註TechLeadCloud,分享互聯網架構、雲服務技術的全維度知識。作者擁有10+年互聯網服務架構、AI產品研發經驗、團隊管理經驗,同濟本復旦碩,復旦機器人智能實驗室成員,阿裡雲認證的資深架構師,項目管理專業人士,上億營收AI產品研發負責人。 ![file](https://img2023. ...
  • [TOC](多線程) # 介紹: C++ 是一種支持多線程編程的編程語言,它提供了豐富的多線程支持來充分利用現代多核處理器的性能。 C++ 多線程編程通常使用標準庫中的 頭文件以及其他相關的標準庫組件來實現。 # 理論: 1. 常用的類: std::thread 類,用於創建和管理線程等等 std: ...
  • 阻塞隊列是一種常用的併發編程工具,它能夠在多線程環境下提供一種安全而高效的數據傳輸機制。本文將介紹阻塞隊列的原理和使用場景,並通過實例演示其在多線程編程中的應用。 # 一、什麼是阻塞隊列 阻塞隊列是一種特殊的隊列,它具有以下幾個特點: 1. 阻塞特性:當隊列為空時,從隊列中獲取元素的操作將會被阻塞, ...
  • 大家好,我是棧長。 最近看到一個話題: > **前幾天去華為面試,後來說通過了,但是HR告訴我簽約簽的是華為慧通的,我該不該去?** > > 來源:https://www.zhihu.com/question/310409624/answer/2437587008 面對這一問題,網友們紛紛表示當然不 ...
  • ### 歡迎訪問我的GitHub > 這裡分類和彙總了欣宸的全部原創(含配套源碼):[https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) ### 本機情況 - 省吃儉用入手了ThinkPad T14, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...