FilterRegistrationBean注冊過濾器探究


官方定義:

A ServletContextInitializer to register Filters in a Servlet 3.0+ container. Similar to the registration features provided by ServletContext but with a Spring Bean friendly design.
The Filter must be specified before calling RegistrationBean.onStartup(ServletContext). Registrations can be associated with URL patterns and/or servlets (either by name or via a ServletRegistrationBeans. When no URL pattern or servlets are specified the filter will be associated to '/*'. The filter name will be deduced if not specified.

是ServletContextInitializer的一個子類,是在servlet 3.0+的web容器中注冊過濾器的一種方式。和servletContext提供的注冊功能類似,但這鍾方式是spring bean友好的方式。過濾器必須要在調用RegistrationBean.onStartup(ServletContext)前指定。Registrations可以指定URL,或者servlet.

 

還是不懂到底是怎么工作的?

 

先看下類的繼承關系,它是ServletContextInitializer的一個子類

 

那么,接下來的問題就是ServletContextInitializer什么時候被調用的?

發現在support包下面有一個SpringBootServletInitializer,它是繼承WebApplicationInitializer。從這個類的名字,我們可以看出它是一個Web應用的初始化器。

 

那么,WebApplicationInitializer和ServletContextInitializer又有什么關系呢?

我們發現,WebApplicationInitializer是spring-web包里的一個類。和WebApplicationInitializer同一個包里,還有另外一個類:SpringServletContainerInitializer,

並這個類是ServletContainerInitializer的一個實現,且有SPI配置,那么很顯然,在web應用啟動的時候,會動態調用SpringServletContainerInitializer。

 

ServletContainerInitializer是什么?

我們發現,他是tomcat里的一個接口。如下圖

 

 猜想,web容器啟動的時候,定會調用所有實現了此接口的類。待驗證。

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM