Spring Boot使用Servlet、Filter或Listener的方式

根据官方文档说明,有两种方式可以在你的Spring Boot应用中使用Servlet、Filter或Listener。

其一:将Servlet、Filter或Listener注册成Spring Bean。

注意:

由于这三者与容器有关,它们不会被延迟初始化!所以,一般情况下不能将其他Spring Bean 注入到这三者的属性中 -- 但不是说不能获取,你完全可以使用某些手段,在调用之前再注入!

Servlet、Filter可以使用ServletRegistrationBean、FilterRegistrationBean来设置初始化参数和映射路径。

默认,如果不指定某个filter的dispatcherType的话,会匹配FORWARD、INCLUDE和REQUEST。如果启用了async,那还会匹配ASYNC。

如果只想使用Bean,而不想在容器中安装它们的话,registration.setEnabled(false) 即可。

其二:使用类路径扫描,具体来说就是在@Configuration class 上使用@ServletComponentScan。

注意:

需要配合@WebServlet、@WebFilter或@WebListener使用; //这是Servlet 3的东西,javax.servlet。

默认扫描当前配置文件所在包及子包。

ps:

如果是Spring MVC项目,且是Java config的,那可以在选择上面的第一种方式;

或者在WebApplicationInitializer实现类中设置Filter - 应该是有一个添加多个Filter的方法,但只能用于dispatcherServlet!

或者,还可以在WebApplicationInitializer实现类的onStartup()方法中获取ServletContext,并注册自己的Servlet、Filter或Listener。

WebApplicationInitializer 这个东西很有意思,属于SPI,但又不用自己设置加载的文件,所以应该是由Spring框架负责提供给ServletContainerInitializer的吧。

还需要补充一点,这是Servlet 3.0+才支持的功能。

上一篇:嵌入式Linux之我行——ARM MMU工作原理剖析【转】


下一篇:Linux运维初级教程(四)shell简介