JAVA-Spring AOP詳解

来源:https://www.cnblogs.com/xiaoluohao/archive/2019/08/01/11286111.html
-Advertisement-
Play Games

1.Spring AOP中的基本概念 連接點(Joinpoint):在程式執行過程中某個特定的點,比如某方法調用的時候或者處理異常的時候。在Spring AOP中,一個連接點總是表示一個方法的執行。 通俗的講: 層與層之間調用的過程中,目標層中可供調用的方法,就稱之為連接點。 切入點(Pointcu ...


1.Spring AOP中的基本概念

  連接點Joinpoint):在程式執行過程中某個特定的點,比如某方法調用的時候或者處理異常的時候。在Spring AOP中,一個連接點總是表示一個方法的執行。

    通俗的講:

       層與層之間調用的過程中,目標層中可供調用的方法,就稱之為連接點。

 

 

  切入點Pointcut):匹配連接點的斷言。通知和一個切入點表達式關聯,併在滿足這個切入點的連接點上運行(例如,當執行某個特定名稱的方法時)。切入點表達式如何和連接點匹配是AOP的核心:Spring預設使用AspectJ切入點語法。

    通俗的講:

       在連接點的基礎上,增加了切入規則,選擇出需要進行增強的連接點,這些基於切入規則選出來的連接點就稱之為切入點。

 

 

  切麵Aspect):一個關註點的模塊化,這個關註點可能會橫切多個對象。事務管理是J2EE應用中一個關於橫切關註點的很好的例子。在Spring AOP中,切麵可以使用基於模式,或者基於@Aspect註解的方式來實現。

    通俗的講:

       狹義上就是,當Spring攔截下切入點後,將這些切入點交給處理類進行功能的增強,這個處理類就稱之為切麵。

       廣義上來講,講Spring底層的代理切入點和處理類加在一起實現的對層與層之間調用過程進行增強的機制,稱之為切麵。

 

 

  通知Advice):在切麵的某個特定的連接點上執行的動作。其中包括了"around"、"before"和"after"等不同類型的通知(通知的類型在後面部分會討論)。許多AOP框架(包括Spring)都是以來攔截器做通知模型,並維護一個一連接點為中心的攔截器鏈。

    通俗的講:

       在Spring底層的代理攔截下切入點後,將切入點交給切麵類,切麵類中就要有處理這寫切入點的方法,這些過程就稱之為通知(也叫增強 增強方法)。正對於切入點執行的過程,通知還分為不同的類型,分別關註切入點在執行過程中的不同的時機。

 

 

  目標對象Target Object):被一個或者多個切麵所通知的對象,也被稱之為 被通知(advised)對象。既然Spring AOP是通過運行時代理實現的,這個對象永遠是一個被代理(Proxied)對象。

    通俗的講:

       就是真正希望被訪問到的對象。Spring底層的動態代理對他進行了代理,具體能不能真的訪問到目標對象,或在目標對象真正執行之前和之後是否做一些額外的操作,取決於切麵。

 

 2.Spring的AOP入門案例

  a.導入aop相關開發包

     

  b.創捷一個切麵類

    

  c.定義通知

    

  d.定義一個連接點

  

  e.配置連接點

    在MyEclipse中導入aop的schema約束文件,以便於在配置文件中可以提示標簽。

    在其中配置切入點:

    

  f.定義切麵

     

  g.執行方法,發現切麵確實起作用

    

 

3.切入點表達式

  a.within表達式

    通過類名進行匹配 粗粒度的切入點表達式

      within(包名.類名)

    則這個類中的所有的連接點都會被表達式識別,成為切入點。

    

    在within表達式中可以使用*號匹配符,匹配指定包下所有的類,註意,只匹配當前包,不包括當前包的子孫包。

    

    在within表達式中也可以用*號匹配符,匹配包

     

    在within表達式中也可以使用..*匹配符,匹配指定包下及其子孫包下的所有類

    

    b.  execution()表達式

         細粒度的切入idan表達式,可以以方法為單位定義切入點規則

      語法:execution(返回值類型   包名.類名.方法名(參數列表,參數類型。。。))

        

 

 

      


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

-Advertisement-
Play Games
更多相關文章
  • 背景: 都知道js內置的類型檢測,大多數情況下是不太可靠的,例如: typeof 、 instanceof typeof 返回一個未經計算的操作數的類型, 可以發現所有對象都是返回object (null是空指針即空對象) instanceof : 用於測試構造函數的prototype屬性是否出現在 ...
  • 這是button預設自帶的css樣式 正常來說,去除button我們使用如下代碼即可 但是有時候卻不起作用,這個時候我們可以使用::after 偽類選擇器,因為button的邊框樣式是通過::after方式實現的,如果在button上定義邊框就會出現兩條邊框線,所以我們可以使用::after的方式去 ...
  • 單一職責原則 單一職責原則:一個類應該只有一個原因引起改變,即一個類應該只負責一個業務邏輯。 問題由來:類T負責t1, t2兩個職責,當因為t1j對類T修改的時候,可能導致類T出現問題而影響職責t2。 解決方案:遵循單一職責原則,將類T進行改寫,確保一個類負責一個職責。 demo: 有一個類Anim ...
  • java路徑存在兩種寫法"/"和"\\" String path="D:\\1.txt"; String path1="D:/1.txt"; ①正斜杠”/”的話,一般在配置文件路徑時,指向下一個路徑只要使用一個 ②而反斜杠”\”的話,在配置文件路徑時,由於它本身在java中有特殊意義,作為轉義符而存 ...
  • 今天給大家分享的是Python面試題系列的第一篇文章,後續我也會陸續整理Python相關的問題給大家,無論是求職者還是新人都可以通過面試題來考察自己的能力缺陷。 這些問題由伯樂線上整理,原文是Python工程師面試題集合。 嘛...這幾天原創少了,因為在憋大招啊.... python面試題大本營 1 ...
  • 通過在類上加註解 @ComponentScan 來掃描 Spring 的組件類。 @ComponentScan 的可選參數 basePackages:指定需要掃描的根包目錄,其子目錄也會被掃描,預設路徑為 @ComponentScan 註解類目錄,及其子目錄 value:basePackages 的 ...
  • 一、部署啟動activiti 1、部署,將兩個war包拷貝到Tomcat下即可。 2、啟動tomcat,訪問http://127.0.0.1:8080/activiti app 預設賬號密碼:admin test 二、修改數據連接和密碼 1、可以直接在頁面上修改密碼,但是重啟後就還原了,這是因為預設 ...
  • 一、logging模塊講解 1.函數:logging.basicConfig() 參數講解: (1)level代表高於或者等於這個值時,那麼我們才會記錄這條日誌 (2)filename代表日誌會寫在這個文件之中,如果沒有這個欄位則會顯示在控制臺上 (3)format代表我們的日誌顯示的格式自定義,如 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...