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+才支持的功能。

posted on 2017-09-22 19:56  LarryZeal  阅读(1047)  评论(0编辑  收藏  举报

导航