日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

gtw-050090|执行拦截器时发生异常_执行流程 | 你真的了解Spring AOP的执行顺序吗?...

發(fā)布時間:2023/12/15 javascript 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gtw-050090|执行拦截器时发生异常_执行流程 | 你真的了解Spring AOP的执行顺序吗?... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Hi! 我是小小,我們又見面了,今天的主要內(nèi)容是,你真的了解Spring AOP的執(zhí)行順序嗎?跟隨著我的腳步,一塊丈量世界,了解世界,重新認識,重新了解Spring AOP的執(zhí)行順序。

聊一聊畢業(yè)四個月的感受

畢業(yè)四個月了,勞動合同還沒有簽,一切都沒有穩(wěn)定下來,不過也似乎也將要穩(wěn)定下來了,生活如流水一般非常平穩(wěn)的運行著,而我的公眾號也在非常平穩(wěn)的編寫著,當然啦,自己最喜歡聽的音樂也還是沒有變,MySoul,一成不變,似乎生活進入了穩(wěn)定狀態(tài),又或者生活沒有進入穩(wěn)定狀態(tài),我也不知道,只知道,這就是生活,唯有這樣的生活才能繼續(xù)進行。這四個月對我感覺,就是每天敲啊敲,每天的敲,拿著微薄的薪水,獲得著微薄的收入,或許這就是生活,自己的,也許這就是一個普通人,再也不能普通過的了生活了,好啦,不吐槽了,生活還需要繼續(xù)進行下去,我們隆重的開始今天的正文。

AOP核心概念

需要了解AOP,首先需要了解這些Spring AOP這些核心概念。

  • Aspect 切面:由一系列切點,增強和引入組成的模塊對象,可定義優(yōu)先級,從而影響增強和引入的執(zhí)行順序,事物管理,在Java中就是一個切面應用的例子。
  • Join point 接入點:程序執(zhí)行期的一個點,例如方法執(zhí)行,類初始化,異常處理,在Spring AOP中,接入點始終表示方法的執(zhí)行。
  • Advice 增強切面在特點接入點的執(zhí)行動作,包括 around,before,and after等多種類型,包含Spring在內(nèi)的許多AOP框架,通常會使用攔截器來實現(xiàn)增強,圍繞著接入點維護一個攔截器鏈。
  • Pointcut 切點,用來匹配特定接入點的表達式,增強將會與切點表達式產(chǎn)生關(guān)聯(lián),并運行在任何切點匹配到的接入點上,通過切點表達式匹配接入點是AOP的核心,Spring默認使用Aspect的切點表達式。
  • Introduction 引入:為某個type聲明額外的方法和字段,Spring AOP允許你引入任何接口以及它的默認實現(xiàn)到被掙錢對象上。
  • Target Object 目標對象,被一個或多個切面增強的對象,也被叫做被增強對象,既然Spring AOP使用運行時代理,那么目標對象就是代理對象。
  • AOP proxy AOP代理,為了實現(xiàn)切面功能一個對象會被AOP框架創(chuàng)建出來,在Spring框架中,AOP代理的默認方式是,有接口,就使用基于接口的jdk動態(tài)代理,否則使用基于類的CGLIB動態(tài)代理,但是我們可以通過設(shè)置proxy-target-完全使用CGLIB動態(tài)代理。
  • Weaving 織入,把一個或多個切面與類或?qū)ο箧溄釉谝黄饎?chuàng)建一個被增強對象,織入能發(fā)生在編譯時,加載時,或運行時,Spring AOP默認就是運行時織入,可以通過枚舉adviceMode來設(shè)置。
  • 模擬aspect advice的執(zhí)行過程

    在這里我們不再展示測試代碼,而是通過簡單的代碼來模擬aspect advice的執(zhí)行過程。

    話不多說,直接上代碼

    package doubt;
    public class AspectAdviceInvokeProcess {
    public static void main(String[] args){
    try {
    //正常執(zhí)行
    AspectInvokeProcess(false);
    System.out.println("=====分割線=====");
    //異常執(zhí)行
    AspectInvokeProcess(true);
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    /**
    * 切面執(zhí)行過程
    * @param isException
    * @throws Exception
    */
    public static void AspectInvokeProcess(boolean isException) throws Exception{
    try {
    try {
    aroundAdvice(isException);
    } finally {
    afterAdvice();
    }
    afterReturningAdvice();
    return;
    } catch (Exception e) {
    afterThrowingAdvice(e);
    throw e;
    return;
    }
    }

    /**
    * 環(huán)繞增強
    * @param isException
    * @throws Exception
    */
    private static void aroundAdvice(boolean isException) throws Exception {
    System.out.println("around before advice");
    try {
    JoinPoint_Proceed(isException);
    } finally {
    System.out.println("around after advice");
    }
    }

    /**
    * 編織后的接入點執(zhí)行過程
    * @param isException
    */
    public static void JoinPoint_Proceed(boolean isException){
    beforeAdvice();
    targetMethod(isException);
    }

    /**
    * 前置增強
    */
    private static void beforeAdvice() {
    System.out.println("before advice");
    }

    /**
    * 目標方法
    * @param isException
    */
    private static void targetMethod(boolean isException) {
    System.out.println("target method 執(zhí)行");
    if(isException)
    throw new RuntimeException("異常發(fā)生");
    }

    /**
    * 后置增強
    */
    private static void afterAdvice() {
    System.out.println("after advice");
    }

    /**
    * 正常返回增強
    */
    private static void afterReturningAdvice() {
    System.out.println("afterReturning");
    }

    /**
    * 異常返回增強
    * @param e
    * @throws Exception
    */
    private static void afterThrowingAdvice(Exception e) throws Exception {
    System.out.println("afterThrowing:"+e.getMessage());
    }
    }

    執(zhí)行結(jié)果

    上面代碼的執(zhí)行結(jié)果如下,直接體現(xiàn)了同一aspect,不同advice的執(zhí)行順序。

    around before advice
    before advice
    target method 執(zhí)行
    around after advice
    after advice
    afterReturning
    ===============分割線==============
    around before advice
    before advice
    target method 執(zhí)行
    around after advice
    after advice
    afterThrowing:異常發(fā)生
    java.lang.RuntimeException: 異常發(fā)生

    結(jié)果圖

    不同aspect,advice的執(zhí)行順序

    Spring AOP 通過制定 aspect 的優(yōu)先級,控制不同的 aspect,advice的執(zhí)行順序。

  • Aspect 類添加注解:org.springframework.core.annotation.Order,使用注解value屬性指定優(yōu)先級。
  • Aspect 類實現(xiàn)接口:org.springframework.core.Ordered,實現(xiàn) Ordered 接口的 getOrder() 方法。
  • 其中,數(shù)值越低,表明優(yōu)先級越高,@Order 默認為最低優(yōu)先級,即最大數(shù)值:

    /**
    * Useful constant for the lowest precedence value.
    * @see java.lang.Integer#MAX_VALUE
    */
    int LOWEST_PRECEDENCE = Integer.MAX_VALUE;

    最終,不同aspect,advice的執(zhí)行順序。

  • 入操作,接入點執(zhí)行前,Brfore 優(yōu)先級越高,越先執(zhí)行。
  • 一個切面的入操作執(zhí)行完,才到下一切面,所有切面入操作執(zhí)行完,才開始執(zhí)行接入點。
  • 出操作,優(yōu)先級越低,越先執(zhí)行。
  • 一個切面的出操作執(zhí)行完,才到下一個切面,知道返回調(diào)用點。
  • 圖示

    同一切面,相同接入點

    其執(zhí)行順序不能直接確定,有如下兩種變通方式

  • 將兩個 advice 合并為一個 advice,那么執(zhí)行順序就可以通過代碼控制了
  • 將兩個 advice 分別抽離到各自的 aspect 內(nèi),然后為 aspect 指定執(zhí)行順序
  • Spring 事物管理器

    Spring 事物管理器是基于Spring AOP的

    切面優(yōu)先級

    切面優(yōu)先級,默認為最低的優(yōu)先級

    LOWEST_PRECEDENCE = Integer.MAX_VALUE

    關(guān)于作者

    我是小小,一枚生在二線,活在一線城市的程序猿,一直致力于奮斗在一線編碼,我是小小,我們下期再見。

    小明菜市場

    推薦閱讀

    ●?吊打面試官 | Java到底是值傳遞還是引用傳遞

    ●?容器 | Docker 如此之好,你為什么還要用k8s

    ●?分布式ID | 這六種分布式ID生成方法,總有一款適合你

    ●?數(shù)據(jù)結(jié)構(gòu)與算法 | 來來來,讓我們重新認識一下什么是樹

    ●?面試官 | Java轉(zhuǎn)List三種方式,你說說吧。我。。懵逼。啥時候有三種了

    給我個好看再走好嗎?

    總結(jié)

    以上是生活随笔為你收集整理的gtw-050090|执行拦截器时发生异常_执行流程 | 你真的了解Spring AOP的执行顺序吗?...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 久久久久久久久电影 | 窝窝在线视频 | 91视频黄色 | 黄色精品视频 | 精品久久久久久久 | 精品无码av一区二区三区四区 | 中文字字幕在线中文乱码 | 国产熟妇一区二区三区四区 | 国产一区欧美一区 | 亚洲成人麻豆 | 麻豆tube| 污漫网站| 蜜臀在线观看 | 免费成人福利视频 | 免费观看黄色网页 | 91精品国产乱码久久久张津瑜 | 神马午夜激情 | 日韩在线观看网站 | 韩国主播青草55部完整 | 操比网站| 久草操 | 精品人人妻人人澡人人爽牛牛 | 91资源在线播放 | 国产亚洲精品久久久久久无几年桃 | 国产中文字幕在线观看 | 国产精品揄拍一区二区 | 性色欲网站人妻丰满中文久久不卡 | 天天干夜操 | 国产群p视频 | 黄色小视频在线观看 | 久久精品在线免费观看 | 国产你懂 | 欧美啪啪网 | 一级福利片 | 99热精品免费 | 欧美伦理一区二区三区 | 免费大片黄在线观看 | av免费在线电影 | 欧美一级淫片免费 | 日本免费小视频 | 妇女一级片 | 黄色a一级视频 | 国产一级二级在线 | 国产又粗又猛又黄 | 免费在线观看成人av | 欧美性生交大片免费看app麻豆 | 二区三区| 成人国产在线视频 | 快射视频网 | 国产精品永久久久久久久久久 | 成人国产在线视频 | 午夜成年人视频 | 99久久精品免费看 | 日本中文字幕在线免费观看 | 国产美女自慰在线观看 | 亚洲一区a| 亚洲超碰av | 日本一二三不卡 | 国产色呦呦 | 欧美系列一区二区 | 禁断介护av一区二区 | 黄色a级网站 | 亚洲精品在线中文字幕 | 一级黄色片在线播放 | 亚洲精品一区二 | 6080电视影片在线观看 | 一区二区三区四区中文字幕 | 91香草视频 | 久久综合中文 | 国产亚洲av综合人人澡精品 | 在线一区二区视频 | 日韩精品在线免费看 | 影音先锋在线看 | 成人久久精品人妻一区二区三区 | 99热这里只有精品在线观看 | av在线资源 | 日韩无码专区 | www.精品 | 手机午夜视频 | 国产高h视频 | 日韩一区二区三区高清 | 亚洲久久视频 | 蜜桃av影视 | 欧美激情国产精品 | 欧美老熟妇乱xxxxx | 久久久久久久久久久国产 | 人人舔人人爽 | 精品中文字幕一区 | 日韩精品视频一区二区三区 | 天天爽天天爽天天爽 | 亚洲乱熟 | 亚洲a v网站 | 污视频网站在线 | 九九九九九伊人 | 欧美视频一区二区三区在线观看 | 韩国av在线 | 影音先锋中文字幕一区 | 日韩精品人妻无码一本 | 精品在线不卡 |