1. 程式人生 > >【Spring框架】 ? WebApplicationInitializer源碼分析及應用

【Spring框架】 ? WebApplicationInitializer源碼分析及應用

web項目 方法 spring app 應用 加載 大於 filter ext

1、背景

  在約定大於配置的大環境下,xml配置文件越來越多的被零配置所取代。還有大部分將原xml中的配置轉為在java類中定義。

  而WebApplicationInitializer就可以看做是web.xml的替代者,在啟動Web項目時會加載該實現類,實現類中可定義對 servlet、filter、listener的操作。

2、源碼分析

  先來看下WebApplicationInitializer接口定義,可以看到只有一個接口,參數ServletContext解釋說要用來初始化的;

  再看類上註解,提示可以參考SpringServletContainerInitializer。

  技術分享圖片

  轉看SpringServletContainerInitializer,先看類定義;

  首先該類實現了ServletContainerInitialize接口,並且在註釋中明確說明在容器啟動時加載該實現類。

技術分享圖片

  技術分享圖片

  再來看重寫的方法 onStartup(Set<Class<?>> webAppInitializerClasses, ServletContext servletContext)

  webAppInitializerClasses,解釋為所有WebApplicationInitializer接口的實現類,也就是說在容器啟動時,webAppInitializerClasses的實現類類型會作為參數傳入;

  下面的代碼就很容易讀懂了,如果不是接口啥的,將實現類實例化放到linkedList,然後循環調用實現類中重寫的方法,以此達到代替xml的作用。

  技術分享圖片

3、應用

  分析完源碼,說下實際項目中的應用。

  沒啥說的,寫了 servlet、filter 、listener的操作。

  技術分享圖片

【Spring框架】 ? WebApplicationInitializer源碼分析及應用