大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 Dubbo的Filter執(zhí)行順序

Dubbo的Filter執(zhí)行順序

更新時間:2022-05-26 10:20:35 來源:動力節(jié)點 瀏覽2121次

服務(wù)提供方的過濾器被調(diào)用順序:app

EchoFilter->ClassLoaderFilter->GenericFilter->ContextFilter->(這4個是在代碼中指定的)ide

ExceptionFilter-> TimeoutFilter ->MonitorFilter-> TraceFilter.net

服務(wù)消費方的過濾器順序:blog

ConsumerContextFilter->FutureFilter->MonitorFilter排序

負(fù)責(zé)加載過濾器的類文檔

ProtocolFilterWrapperget

這個順序和SPI配置文件的順序并不一致。那么是什么決定了Filter的順序呢?

經(jīng)過查看源代碼能夠看到,在初始化Filter時,有一個對全部的過濾器排序的過程,其使用的比較類是ActivateComparator。在這個類中,能夠看到,是使用Filter中的Activate類進(jìn)行排序的。而Activate注解中,有一個order的屬性,這個屬性指定了Filter在chain中的順序。代碼以下:io

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface Activate {
    String[] group() default {};
    String[] value() default {};
    String[] before() default {};
    String[] after() default {};
    int order() default 0;
}

經(jīng)過查看EchoFilter的Activate屬性,能夠看到其order = -110000,而ClassLoaderFilter的order=-30000,所以能夠判定,order值越小,其越位于調(diào)用端的最頂層。

以下:

@Activate(
    group = {"provider"},
    order = -110000
)
public class EchoFilter implements Filter {
    public EchoFilter() {
    }
    public Result invoke(Invoker<?> invoker, Invocation inv) throws RpcException {
        return (Result)(inv.getMethodName().equals("$echo") && inv.getArguments() != null && inv.getArguments().length == 1 ? new RpcResult(inv.getArguments()[0]) : invoker.invoke(inv));
    }
}
@Activate(
    group = {"provider"},
    order = -30000
)
public class ClassLoaderFilter implements Filter {
    public ClassLoaderFilter() {
    }
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        ClassLoader ocl = Thread.currentThread().getContextClassLoader();
        Thread.currentThread().setContextClassLoader(invoker.getInterface().getClassLoader());
        Result var4;
        try {
            var4 = invoker.invoke(invocation);
        } finally {
            Thread.currentThread().setContextClassLoader(ocl);
        }
        return var4;
    }
}

從上面能夠看出,若是須要規(guī)定自定義的Filter的執(zhí)行順序,能夠經(jīng)過設(shè)置自定義的Filter的@Active注解中order屬性值,越小越先執(zhí)行。

那么當(dāng)order相同時(都沒有設(shè)置時),又是根據(jù)什么排序的呢?

Collections.sort算法

從其說明文檔能夠看出,這個算法是一個穩(wěn)定的排序算法,若是兩個值相同,不會改變其先后順序。而且從其文檔能夠看出,其所使用的是一個修改過的歸并排序算法。

可是Activate的compare方法故意將兩個相同的order類弄成了不一樣,致使排序有些變化。形成了最終上述順序。

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 和日本免费不卡在线v | 久久影院国产 | 日本中文不卡 | 亚洲精品久久久久中文 | 欧美日韩片 | 国产日韩欧美综合一区二区三区 | 久久 在线播放 | 精品国产品香蕉在线观看 | 精品国产美女 | 四虎影院永久免费 | 国产午夜亚洲精品不卡福利 | 九九九热视频 | 亚洲精品一区二区三区在线观看 | 欧美性性性性性色大片 | 福利姬在线精品观看 | 精品哟啊呦v视频在线观看 精品哟哟国产在线观看 | 久草在线中文最新视频 | 激情浪荡yin乱之合集 | 亚洲精品一区二区伦理 | 久久香蕉国产线看免费 | 婷婷在线五月 | 国产乱肥老妇精品视频 | 久久精品亚洲99一区二区 | 手机看片一区 | 97色老99久久九九爱精品 | 免费看欧美一级特黄a大片 免费看欧美一级特黄a大片一 | 日操夜操天天操 | 国产精品久久久久久五月尺 | 一级欧美视频 | 亚洲国产精品综合一区在线 | 四虎在线播放 | 免费视频久久 | 中国在线播放精品区 | 国产精品99久久久久久人 | 天天做天天爱天天怼 | 免费观看成人毛片 | 国产综合色在线视频区色吧图片 | 欧美 xx性 在线 | 四虎影院视频在线观看 | 看一级大片 | 欧美夜夜骑|