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使用;
默認掃描當前配置文件所在包及子包。
ps:
如果是Spring MVC項目,且是Java config的,那可以在選擇上面的第一種方式;
或者在WebApplicationInitializer實現類中設置Filter - 應該是有一個添加多個Filter的方法,但只能用於dispatcherServlet!
或者,還可以在WebApplicationInitializer實現類的onStartup()方法中獲取ServletContext,並註冊自己的Servlet、Filter或Listener。
還需要補充一點,這是Servlet 3.0+才支持的功能。
Spring Boot使用Servlet、Filter或Listener的方式