Spring AOP 註解詳解
切面:Aspect
切面=切入點 通知。在舊的spring版本中通常用xml來配置,現在通常是一個類別帶上@Aspect註解。切面負責將 橫切邏輯(通知) 編織 到指定的連接點。
目標物件:Target
將要被增強的物件。
連接點:JoinPoint
可以被攔截到的程式執行點,在spring中就是類別中的方法。
切入點:PointCut
需要執行攔截的方法,也就是具體實作了橫切邏輯的方法。切入點的規則在spring中透過AspectJ pointcut expression language來描述。
切入點與連接點的區別:連接點是所有可以被"切"的點;切入點是真正要切的點。
通知:Advice
針對切入點的橫切邏輯,包含「around」、「before」和「after」等不同類型的通知。
通知的作用點如其命名:
before:在切入點之前執行
- ##after:在切入點之後執行
- around:在切入點攔截方法,自訂前後,更靈活
織入:Weaving
首先是切面類別:
package com.example.demo.aop; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*; import org.springframework.stereotype.Component; /** * @author Fcb * @date 2020/6/20 * @description 切面类=切入点+通知 */ @Aspect @Component public class LogAspect { //这个方法定义了切入点 @Pointcut("@annotation(com.example.demo.aop.anno.MyLog)") public void pointCut() {} //这个方法定义了具体的通知 @After("pointCut()") public void recordRequestParam(JoinPoint joinPoint) { for (Object s : joinPoint.getArgs()) { //打印所有参数,实际中就是记录日志了 System.out.println("after advice : " + s); } } //这个方法定义了具体的通知 @Before("pointCut()") public void startRecord(JoinPoint joinPoint) { for (Object s : joinPoint.getArgs()) { //打印所有参数 System.out.println("before advice : " + s); } } //这个方法定义了具体的通知 @Around("pointCut()") public Object aroundRecord(ProceedingJoinPoint pjp) throws Throwable { for (Object s : pjp.getArgs()) { //打印所有参数 System.out.println("around advice : " + s); } return pjp.proceed(); } }
package com.example.demo.aop.anno; import java.lang.annotation.*; /** * @author Fcb * @date 2020/6/20 * @description */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD, ElementType.TYPE}) public @interface MyLog { }
package com.example.demo.aop.target; import com.example.demo.aop.anno.MyLog; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** * @author Fcb * @date 2020/6/20 * @description */ @RestController public class MockController { @RequestMapping("/hello") @MyLog public String helloAop(@RequestParam String key) { System.out.println("do something..."); return "hello world"; } }
package com.example.demo.aop.target; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; /** * @author Fcb * @date 2020/6/20 * @description */ @SpringBootTest class MockControllerTest { @Autowired MockController mockController; @Test void helloAop() { mockController.helloAop("aop"); } }
around advice : aop推薦教學:《before advice : aop
do something...
after advice : aop
Java教程》
以上是Spring AOP 註解詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

2023年,AI技術已成為熱門話題,對各行業產生了巨大影響,程式設計領域尤其如此。人們越來越認識到AI技術的重要性,Spring社群也不例外。隨著GenAI(GeneralArtificialIntelligence)技術的不斷進步,簡化具備AI功能的應用程式的創建變得至關重要和迫切。在這個背景下,"SpringAI"應運而生,旨在簡化開發AI功能應用程式的過程,使其變得簡單直觀,避免不必要的複雜性。透過"SpringAI",開發者可以更輕鬆地建立具備AI功能的應用程序,將其變得更加易於使用和操作

Spring+AI作為行業領導者,透過其強大、靈活的API和先進的功能,為各種行業提供了領先性的解決方案。在本專題中,我們將深入探討Spring+AI在各領域的應用範例,每個案例都將展示Spring+AI如何滿足特定需求,實現目標,並將這些LESSONSLEARNED擴展到更廣泛的應用。希望這個專題能對你有所啟發,更深入地理解和利用Spring+AI的無限可能。 Spring框架在軟體開發領域已經有超過20年的歷史,自SpringBoot1.0版本發布以來已有10年。現在,無人會質疑,Spring

spring編程式事務的實作方式:1、使用TransactionTemplate;2、使用TransactionCallback和TransactionCallbackWithoutResult;3、使用Transactional註解;4、使用TransactionTemplate和@Transactional結合使用;5、自訂事務管理器。

JUnit框架中的註解用於聲明和配置測試方法,主要註解包括:@Test(聲明測試方法)、@Before(測試方法執行前運行的方法)、@After(測試方法執行後運行的方法)、@ BeforeClass(所有測試方法執行前運行的方法)、@AfterClass(所有測試方法執行後運行的方法),這些註解有助於組織和簡化測試程式碼,並透過提供明確的意圖和配置來提高測試程式碼的可讀性和可維護性。

引言:PHPDoc是一種用於php程式碼的註解標準,可產生易於理解且資訊豐富的文件。透過使用特定的註釋標籤,PHPDoc允許開發人員提供有關函數、類別、方法和其他程式碼元素的重要詳細資訊。這篇進階指南將深入探討PHPDoc,展示其功能並提供有效的文檔化策略。語法與標籤:PHPDoc註解以雙斜線(//)或多行註解(/**/)開頭。以下是一些常見的註解標籤:@param:定義函數或方法的參數。 @return:指定函數或方法的回傳值。 @throws:說明函數或方法可能引發的異常。 @var:定義類別的屬性或實例

Spring設定事務隔離等級的方法:1、使用@Transactional註解;2、在Spring設定檔中設定;3、使用PlatformTransactionManager;4、在Java配置類別中設定。詳細介紹:1、使用@Transactional註解,在需要進行事務管理的類別或方法上加入@Transactional註解,並在屬性中設定隔離等級;2、在Spring設定檔等等。

Jackson庫中的註解可控制JSON序列化和反序列化:序列化:@JsonIgnore:忽略屬性@JsonProperty:指定名稱@JsonGetter:使用獲取方法@JsonSetter:使用設定方法反序列化:@JsonIgnoreProperties:忽略屬性@ JsonProperty:指定名稱@JsonCreator:使用建構子@JsonDeserialize:自訂邏輯

MyBatis註解動態SQL的使用方法詳解IntroductiontotheusageofMyBatisannotationdynamicSQLMyBatis是一個持久層框架,為我們提供了便利的持久化操作。在實際開發中,通常需要根據業務需求來動態產生SQL語句,以實現靈活的資料操作。 MyBatis註解動態SQL正是為了滿足這項需求而設計的,本
