最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring aop 五種通知類型小結

 更新時間:2026年03月11日 09:47:35   作者:changhong1986  
本文主要介紹了Spring aop 五種通知類型,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

spring aop 的五種通知類型

  1. 前置通知 Before advice:在連接點前面執(zhí)行,前置通知不會影響連接點的執(zhí)行,除非此處拋出異常
  2. 后置通知 After returning advice:在連接點正常執(zhí)行完成后執(zhí)行,如果連接點拋出異常,則不會執(zhí)行
  3. 異常通知 After throwing advice:在連接點拋出異常后執(zhí)行
  4. 最終通知 After (finally) advice:在連接點執(zhí)行完成后執(zhí)行,不管是正常執(zhí)行完成,還是拋出異常,都會執(zhí)行返回通知中的內容
  5. 環(huán)繞通知 Around advice:環(huán)繞通知圍繞在連接點前后,能在方法調用前后自定義一些操作,還需要負責決定是繼續(xù)處理 join point (調用 ProceedingJoinPoint 的 proceed 方法)還是中斷執(zhí)行

五大通知類型中,環(huán)繞通知功能最為強大,因為環(huán)繞通知,可以控制目標方法是否執(zhí)行。
如果需要記錄異常信息,使用異常通知。
其他通知,只能做記錄工作,不能做處理,所以執(zhí)行順序其實對整個程序影響不大,沒有必要太深究。

spring aop 通知類型使用

添加 Aspect 切面類

package com.example.demo.module.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

@Component
@Aspect
public class AdviceTest {

    // 配置織入點
    @Pointcut("execution(public * com.example.demo.module.aspect.Test.*(..))")
    public void test(){

    }

    @Before("test()")
    public void doBefore(JoinPoint joinPoint){
        System.out.println(joinPoint.getSignature().getName() + "執(zhí)行前置通知---");
    }

    @AfterReturning("test()")
    public void doAfterSuccess(JoinPoint joinPoint){
        System.out.println(joinPoint.getSignature().getName() + "執(zhí)行返回通知---");
    }

    @AfterThrowing("test()")
    public void doAfterError(JoinPoint joinPoint){
        System.out.println(joinPoint.getSignature().getName() + "執(zhí)行異常通知---");
    }

    @Around(value = "test()", argNames = "pjp")
    public Object doAround(ProceedingJoinPoint pjp) {
        Object[] args = pjp.getArgs();
        Object result;
        try {
        	// Before
            System.out.println(pjp.getSignature().getName() + "環(huán)繞前置通知---");
            result = pjp.proceed(args);
            // AfterReturning
            System.out.println(pjp.getSignature().getName() + "環(huán)繞返回通知---");
        }catch (Throwable e){
        	// AfterThrowing
            System.out.println(pjp.getSignature().getName() + "環(huán)繞異常通知---");
            throw new RuntimeException(e);
        }finally {
        	// After
            System.out.println(pjp.getSignature().getName() + "環(huán)繞最終通知---");
        }
        return result;
    }

    @After("test()")
    public void doAfter(JoinPoint joinPoint){
        System.out.println(joinPoint.getSignature().getName() + "執(zhí)行最終通知---");
    }

}

添加測試方法:

package com.example.demo.module.aspect;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("test")
@RestController
public class Test {

    @GetMapping("testMethod")
    public void testMethod(){
        System.out.println("方法執(zhí)行---");
    }

}

運行結果:

測試異常通知,修改測試方法:

package com.example.demo.module.aspect;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("test")
@RestController
public class Test {

    @GetMapping("testMethod")
    public void testMethod(){
    	int i= 1/0;
        System.out.println("方法執(zhí)行---");
    }

}

運行結果:

通知執(zhí)行順序

Spring 版本不一樣,通知執(zhí)行順序可能也會存在差異

@Before、@After、@AfterReturning、@AfterThrowing執(zhí)行順序

  1. Spring 4.0
    正常情況:@Before -> 目標方法 -> @After -> @AfterReturning
    異常情況:@Before -> 目標方法 -> @After -> @AfterThrowing
  2. Spring 5.28
    正常情況:@Before -> 目標方法 -> @AfterReturning -> @After
    異常情況:@Before -> 目標方法 -> @AfterThrowing -> @After

@Around的執(zhí)行順序

  1. Spring 4.0
    正常情況:環(huán)繞前置 -> 目標方法執(zhí)行 -> 環(huán)繞返回 -> 環(huán)繞最終
    異常情況:環(huán)繞前置 -> 目標方法執(zhí)行 -> 環(huán)繞異常 -> 環(huán)繞最終
  2. Spring 5.28
    正常情況:環(huán)繞前置 -> 目標方法執(zhí)行 -> 環(huán)繞返回 -> 環(huán)繞最終
    異常情況:環(huán)繞前置 -> 目標方法執(zhí)行 -> 環(huán)繞異常 -> 環(huán)繞最終

五大通知執(zhí)行順序

  1. Spring 4.0
    正常情況:環(huán)繞前置 -> @Before -> 目標方法執(zhí)行 -> 環(huán)繞返回 -> 環(huán)繞最終 -> @After -> @AfterReturning
    異常情況:環(huán)繞前置 -> @Before -> 目標方法執(zhí)行 -> 環(huán)繞異常 -> 環(huán)繞最終 -> @After -> @AfterThrowing
  2. Spring 5.28
    正常情況:環(huán)繞前置 -> @Before -> 目標方法執(zhí)行 -> @AfterReturning -> @After -> 環(huán)繞返回 -> 環(huán)繞最終
    異常情況:環(huán)繞前置 -> @Before -> 目標方法執(zhí)行 -> @AfterThrowing -> @After -> 環(huán)繞異常 -> 環(huán)繞最終

到此這篇關于Spring aop 五種通知類型小結的文章就介紹到這了,更多相關Spring aop 通知類型內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • macOS中搭建Java8開發(fā)環(huán)境(基于Intel?x86?64-bit)

    macOS中搭建Java8開發(fā)環(huán)境(基于Intel?x86?64-bit)

    這篇文章主要介紹了macOS中搭建Java8開發(fā)環(huán)境(基于Intel?x86?64-bit)?的相關資料,需要的朋友可以參考下
    2022-12-12
  • redisson分布式鎖的用法大全

    redisson分布式鎖的用法大全

    這篇文章主要介紹了redisson分布式鎖的用法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Java創(chuàng)建隨機數的四種方式總結

    Java創(chuàng)建隨機數的四種方式總結

    這篇文章主要介紹了java的四種隨機數生成方式的實現方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,,需要的朋友可以參考下
    2022-07-07
  • Activiti7與Spring以及Spring Boot整合開發(fā)

    Activiti7與Spring以及Spring Boot整合開發(fā)

    這篇文章主要介紹了Activiti7與Spring以及Spring Boot整合開發(fā),在Activiti中核心類的是ProcessEngine流程引擎,與Spring整合就是讓Spring來管理ProcessEngine,有感興趣的同學可以參考閱讀
    2023-03-03
  • java實現發(fā)送手機短信

    java實現發(fā)送手機短信

    這篇文章主要介紹了java實現發(fā)送手機短信,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • @OneToMany查詢陷入循環(huán)引用的解決方案

    @OneToMany查詢陷入循環(huán)引用的解決方案

    這篇文章主要介紹了@OneToMany查詢陷入循環(huán)引用的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • JAVA8妙用Optional解決判斷Null為空的問題方法

    JAVA8妙用Optional解決判斷Null為空的問題方法

    本文主要介紹了JAVA8妙用Optional解決判斷Null為空的問題方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Springboot整合Rabbitmq之Confirm和Return機制

    Springboot整合Rabbitmq之Confirm和Return機制

    這篇文章主要介紹了Springboot整合Rabbitmq之Confirm和Return詳解,本篇重點進行Confirm?機制和Return?機制的實現和說明,通過實例代碼相結合給大家詳細介紹,對Springboot整合Rabbitmq相關知識感興趣的朋友一起看看吧
    2022-02-02
  • Gradle下如何搭建SpringCloud分布式環(huán)境

    Gradle下如何搭建SpringCloud分布式環(huán)境

    這篇文章主要介紹了Gradle下如何搭建SpringCloud分布式環(huán)境問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • java.Net.UnknownHostException異常處理問題解決

    java.Net.UnknownHostException異常處理問題解決

    這篇文章主要介紹了java.Net.UnknownHostException異常處理方法,問題原因是在系統(tǒng)的?/etc/Hostname中配置了主機名,而在/etc/hosts文件中沒有相應的配置,本文給大家詳細講解,需要的朋友可以參考下
    2023-03-03

最新評論

灵丘县| 新干县| 鄯善县| 赫章县| 翁牛特旗| 灵宝市| 开化县| 信阳市| 杭锦后旗| 新乡市| 龙山县| 望奎县| 彰武县| 香河县| 化德县| 重庆市| 扶余县| 松桃| 金湖县| 建瓯市| 建瓯市| 遵义市| 平原县| 梧州市| 宁明县| 措勤县| 江北区| 迭部县| 宣恩县| 天台县| 阿拉善右旗| 噶尔县| 惠州市| 桐城市| 禄丰县| 扶绥县| 北票市| 临沭县| 滁州市| 永胜县| 潜江市|