参考文献

@WebFilter

使用

  • @WebFilter时,Filter被加载有两个条件:
    • 声明了@WebFilter
    • 在能被@ServletComponentScan扫到的路径之下

@WebFilter@Component

相同点

  • 它们最终都被包装并实例化成为了FilterRegistrationBean
  • 它们最终都是在ServletContextInitializerBeans的构造器中开始被实例化

不同点

  • @WebFilter修饰的过滤器会被提前在BeanFactoryPostProcessors扩展点包装成FilterRegistrationBean类型的BeanDefinition,然后在ServletContextInitializerBeans.addServletContextInitializerBeans()进行实例化;
  • 而使用@Component修饰的过滤器类,是在ServletContextInitializerBeans.addAdaptableBeans()中被实例化成Filter类型后,再包装为RegistrationBean类型。
  • 被@WebFilter修饰的过滤器不会注入Order属性,但被@Component修饰的过滤器会在ServletContextInitializerBeans.addAdaptableBeans()中注入Order属性