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

詳解SpringMVC的攔截器鏈實(shí)現(xiàn)及攔截器鏈配置

 更新時(shí)間:2022年08月30日 09:51:50   作者:mzz124  
攔截器(Interceptor)是一種動(dòng)態(tài)攔截方法調(diào)用的機(jī)制,在SpringMVC中動(dòng)態(tài)攔截控制器方法的執(zhí)行。本文將詳細(xì)講講SpringMVC中攔截器參數(shù)及攔截器鏈配置,感興趣的可以嘗試一下

1、攔截器鏈實(shí)現(xiàn)

只需定義多個(gè)攔截器的 bean,然后在攔截器的配置類(lèi)中將其逐一添加即可

第一個(gè)攔截器的定義:

@Component
public class ProjectInterceptor1 implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle111...");
        return true;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle111...");
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion111...");
    }
}

第二個(gè)攔截器的定義:

@Component
public class ProjectInterceptor2 implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle222...");
        return true;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle222...");
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion222...");
    }
}

攔截器配置類(lèi):

@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {
    @Autowired
    private ProjectInterceptor1 interceptor1;
    @Autowired
    private ProjectInterceptor2 interceptor2;
    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(interceptor1).addPathPatterns("/books", "/books/*");
        registry.addInterceptor(interceptor2).addPathPatterns("/books", "/books/*");
    }
}

2、攔截器鏈的執(zhí)行順序

攔截器配置類(lèi)中,首先被添加的攔截器在外層,之后添加的在內(nèi)層,請(qǐng)求發(fā)出之后首先被外層的攔截器攔截,外層放行后進(jìn)入內(nèi)層,而離開(kāi)攔截器時(shí)先離開(kāi)內(nèi)層的攔截器,再離開(kāi)外層。

上例子中第一個(gè)攔截器在外層,第二個(gè)在內(nèi)層,所以上例中攔截器的輸出順序?yàn)椋?/p>

preHandle111...
preHandle222...
postHandle222...
postHandle111...
afterCompletion222...
afterCompletion111...

值得注意的是,afterCompletion 方法的一定會(huì)在 postHandle 之后執(zhí)行,并且也是由內(nèi)層向外層執(zhí)行,所以 afterCompletion222 輸出在 postHandle111 之后,而在 afterCompletion111 之前。換言之,即便有再多的攔截器,最先執(zhí)行的 afterCompletion 也一定在最后執(zhí)行的 postHandle 之后才執(zhí)行

此外,當(dāng)攔截器的 preHandle 方法返回 false 時(shí),其內(nèi)層的攔截器以及它自身 postHandle 和 afterCompletion 都不會(huì)再執(zhí)行,而所有外層攔截器的 postHandle 不再執(zhí)行,但 afterCompletion 照常執(zhí)行

這是因?yàn)?postHandle 執(zhí)行在原始 Controller 方法執(zhí)行之后,必須所有攔截器都放行時(shí),才會(huì)執(zhí)行原始方法,也就才會(huì)執(zhí)行 postHandle 方法

上例中第二個(gè)攔截器 preHandle 返回 false 時(shí)的輸出順序:

preHandle111...
preHandle222...
afterCompletion111...

到此這篇關(guān)于詳解SpringMVC的攔截器鏈實(shí)現(xiàn)及攔截器鏈配置的文章就介紹到這了,更多相關(guān)SpringMVC攔截器鏈 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mybatis-Plus實(shí)現(xiàn)自動(dòng)生成代碼的操作步驟

    Mybatis-Plus實(shí)現(xiàn)自動(dòng)生成代碼的操作步驟

    AutoGenerator 是 MyBatis-Plus 的代碼生成器,通過(guò) AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各個(gè)模塊的代碼,極大的提升了開(kāi)發(fā)效率,本文將給大家介紹Mybatis-Plus實(shí)現(xiàn)自動(dòng)生成代碼的操作步驟
    2023-10-10
  • Java中關(guān)于Map四種取值方式

    Java中關(guān)于Map四種取值方式

    這篇文章主要介紹了Java中關(guān)于Map四種取值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • springmvc之獲取參數(shù)的方法(必看)

    springmvc之獲取參數(shù)的方法(必看)

    下面小編就為大家?guī)?lái)一篇springmvc之獲取參數(shù)的方法(必看)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • Java如何獲取主機(jī)的基本信息詳解

    Java如何獲取主機(jī)的基本信息詳解

    最近遇到一個(gè)工作需求,上網(wǎng)查了一下怎樣在Java中獲取本機(jī)的ip和主機(jī)名,所以下面這篇文章主要給大家介紹了關(guān)于Java如何獲取主機(jī)的基本信息,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-12-12
  • Spring整合Quartz開(kāi)發(fā)代碼實(shí)例

    Spring整合Quartz開(kāi)發(fā)代碼實(shí)例

    這篇文章主要介紹了Spring整合Quartz開(kāi)發(fā)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • springboot使用@data注解減少不必要代碼

    springboot使用@data注解減少不必要代碼

    這篇文章主要介紹了springboot使用@data注解減少不必要代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • JeecgBoot框架升級(jí)至Spring?Boot3的實(shí)戰(zhàn)步驟

    JeecgBoot框架升級(jí)至Spring?Boot3的實(shí)戰(zhàn)步驟

    本文主要介紹了JeecgBoot框架升級(jí)至Spring?Boot3的實(shí)戰(zhàn)步驟,從?2.7.10升級(jí)到3.1.5有以下幾個(gè)點(diǎn)需要注意,下面就來(lái)詳細(xì)的介紹一下,感興趣的可以了解一下
    2024-04-04
  • Idea為java程序添加啟動(dòng)參數(shù)(含:VM?options、Program?arguments、Environment?variable)

    Idea為java程序添加啟動(dòng)參數(shù)(含:VM?options、Program?arguments、Environme

    設(shè)置啟動(dòng)參數(shù)的意義就是當(dāng)啟動(dòng)程序時(shí),程序會(huì)優(yōu)先讀取idea的配置參數(shù),這樣就可以不用修改配置文件,下面這篇文章主要給大家介紹了關(guān)于Idea為java程序添加啟動(dòng)參數(shù)(含:VM?options、Program?arguments、Environment?variable)的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • maven配置阿里倉(cāng)庫(kù)的方法步驟

    maven配置阿里倉(cāng)庫(kù)的方法步驟

    這篇文章主要介紹了maven配置阿里倉(cāng)庫(kù)的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • java實(shí)現(xiàn)簡(jiǎn)單單鏈表

    java實(shí)現(xiàn)簡(jiǎn)單單鏈表

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單單鏈表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-02-02

最新評(píng)論

台北市| 平武县| 丰城市| 陆丰市| 修水县| 都江堰市| 上虞市| 海盐县| 衡水市| 化德县| 武穴市| 改则县| 慈溪市| 青州市| 南开区| 玛多县| 勐海县| 鸡西市| 眉山市| 永寿县| 黔南| 珲春市| 搜索| 尚志市| 乌拉特前旗| 廊坊市| 黄陵县| 崇义县| 夹江县| 屯昌县| 象山县| 太湖县| 安乡县| 崇文区| 印江| 崇义县| 天台县| 浦北县| 涟源市| 沽源县| 芮城县|