日韩性视频-久久久蜜桃-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)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产成人免费片在线观看 | 97超碰在线免费 | 日韩一级视频在线观看 | 亚洲黄色免费在线观看 | 香蕉久久夜色精品国产使用方法 | 国产96在线 | 亚洲 | 天天色天天操天天射 | 调教一区二区 | 日本五十路 | 免费高清毛片 | 在线国产视频一区 | 尤物视频在线观看视频 | 亚洲高清视频在线观看 | 日日爱669 | 成人精品自拍 | 性生交生活片1 | 韩国毛片一区二区 | 香蕉视频在线观看免费 | 91黄免费 | 天天黄色片| 日韩免费影视 | 蜜臀av一区二区三区 | 午夜日韩福利 | 丁香六月啪啪 | www.成人av| juliaann第一次和老师 | 日本欧美国产在线 | 99欧美| 超碰97色 | 丁香花五月天 | 超碰这里只有精品 | 亚洲天堂va | 免费成人深夜小野草 | 精品免费国产 | 性爱动漫 | 水密桃av| 美女网站免费视频 | 日韩在线二区 | 亚洲在线一区二区 | 色婷婷香蕉在线一区二区 | 国产激情文学 | 欧美一区二区在线观看视频 | 肉丝袜脚交视频一区二区 | 超碰91在线 | 91蜜桃视频| av资源中文在线 | 久久对白 | www.超碰在线.com | 奇米影视首页 | 国产成人免费电影 | 爱爱小视频网站 | 亚洲午夜精品久久久 | 日韩av资源网 | 激情五月婷婷 | av黄色一级片 | 男人的天堂免费 | 永久在线免费观看 | 污视频免费在线观看 | 亚洲天堂欧美 | 在线观看福利电影 | 99久久婷婷国产精品综合 | 亚洲色图偷拍 | 在线观看国产黄色 | 亚洲一区动漫 | 亚洲色图第1页 | 探花精品 | 欧美精品 在线观看 | 一道本在线播放 | 嫩草国产| 九九在线观看免费高清版 | 少妇又白又嫩又色又粗 | 黄色69视频 | 亚洲第一黄色 | 国产自偷自拍视频 | 亚洲在线成人 | 日日干夜 | 久久综合精品国产二区无码不卡 | 清清草视频 | 亚洲一区二区播放 | 少妇一级淫片免费视频 | 欧美性爱精品在线 | 日本韩国欧美一区二区三区 | 熟妇人妻无乱码中文字幕真矢织江 | 亚洲色图在线观看 | 日产国产亚洲精品系列 | 国产精品久久久久久久久晋中 | 国产精品xxx视频 | 老司机午夜福利视频 | 91精品91久久久中77777老牛 | 久久久久色 | 日本大尺度做爰呻吟 | 都市激情 自拍偷拍 | 国模私拍一区二区三区 | 18视频在线观看网站 | 久久久久99精品成人片我成大片 | 欧美色交 | 成人激情电影在线观看 | 国产成人影视 | 韩国中文字幕在线观看 |