zoukankan      html  css  js  c++  java
  • 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+才支持的功能。

  • 相关阅读:
    数据库流行度9月排行榜:Oracle 的老骥伏枥和 MongoDB 逆风飞扬
    ssh 执行单引号和双引号问题
    【Netapp】在模拟器中使用disk removeowner报错
    ES6的let和const命令(一)
    ES6的let和const命令(一)
    ES6的let和const命令(一)
    ES6的let和const命令(一)
    Android开发之《异常处理》
    Android开发之《异常处理》
    Android开发之《异常处理》
  • 原文地址:https://www.cnblogs.com/larryzeal/p/7576875.html
Copyright © 2011-2022 走看看