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容器启动的时候,定会调用所有实现了此接口的类。待验证。

 

 

 

 

 

转载于:https://www.cnblogs.com/lzmrex/p/10976043.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值