Servlet 过滤器作为组件 Spring 启动

Servlet Filter as Component Spring Boot

我想在 Spring 引导 Web 应用程序中配置 Servlet 过滤器,我想使用 @Value 注释自动装配一些 Bean 和属性。我能够使用以下配置实现此目的:

   @Configuration
   public class MyWebConfig{  
      @Autowire
      MyFilter filter;

      @Autowire
      MyAnotherFilter anotherFilter;  

      @Bean
      public FilterRegistrationBean someFilterRegistration() {
           FilterRegistrationBean registration = new  FilterRegistrationBean();
           registration.setFilter(filter);
           registration.setOrder(1);
           return registration;
      }

      @Bean
      public FilterRegistrationBean someFilterRegistration() {
           FilterRegistrationBean registration = new  FilterRegistrationBean();
           registration.setFilter(anotherFilter);
           registration.setOrder(2);
           return registration;
      }

   } 

而且我已经配置了两个过滤器(为简洁起见只显示一个过滤器):

@Configuration
public class MyFilter implements Filter{

   @Value("${my.property.key}")
   private String myProperty;

   public void doFilter(...){
        ....
   }

   //init and destroy stubs  
        ....    
} 

一切正常。我还有几个问题:
1)即使我注释掉 FilterRegistrationBean 的一段代码,它也能正常工作。如果我想设置特定顺序,我觉得我必须使用 FilterRegistrationBean。正确吗?
2) 有什么方法可以在没有 FilterRegistrationBean 的情况下设置顺序或其他配置,例如 url 模式?
3) 我相信我可以使用 @Component 替换 Filter 上的 @Configuration 注释 class 并且它会正常工作?
4) 最后,将 Filter class 本身标记为 @Component/@Configuration 好吗?

请注意,我在主应用程序 class 上使用 @SpringBootApplication。

1) It works even when I comment out FilterRegistrationBean piece of code. I feel I must use FilterRegistrationBean if I want to set certain order. Correct?

之所以有效,是因为任何 Filter bean 都会自动注册一些默认配置,除非您提供了显式注册 bean。

2) Is there any way I can set order or other configuration like url patterns without FilterRegistrationBean?

您可以通过在 Filter 上使用 @Order 或让它实现 Ordered.

来设置顺序

如果您想设置 URL 模式,您应该使用注册 bean

3) I believe I can use @Component can replace @Configuration annotation on Filter class and it will work correctly?

正确。您的过滤器不是配置,因此应使用 @Component 而不是 @Configuration

进行注释

4) And finally Is it good to have Filter class itself marked as @Component/@Configuration?

是的,可以用 @Component 注释过滤器。另一种方法是在 @Configuration class.

上使用 @Bean 方法