Spring boot的@Configuration

  就在我惊艳于spring 4的AbstractAnnotationConfigDispatcherServletInitializer小巧简洁(如下)的时候却发现spring boot下面竟然无效。

 1 public class Initializer extends AbstractAnnotationConfigDispatcherServletInitializer {
 2 
 3     @Override
 4     protected String[] getServletMappings() {
 5         return new String[] { "/" };
 6     }
 7 
 8     @Override
 9     protected Class<?>[] getRootConfigClasses() {
10         return new Class[] { TracingConfiguration.class, AppConfiguration.class };
11     }
12 
13     /** Ensures tracing is setup for all HTTP requests. */
14     @Override
15     protected Filter[] getServletFilters() {
16         return new Filter[] { new DelegatingTracingFilter() };
17     }
18 
19     @Override
20     protected Class<?>[] getServletConfigClasses() {
21         // TODO Auto-generated method stub
22         return null;
23     }
24 }

 

  后来经过调研发现其实是需要通过@Configuration(注意类级别注解)的类来进行处理,比如下例就是通过FilterRegistrationBean 来指定filter(相当于上面的getServletFilters函数):

 1 @Configuration
 2 public class AppConfiguration {
 3     @Autowired
 4     private AutowireCapableBeanFactory beanFactory;
 5 
 6     @Bean
 7     public FilterRegistrationBean myFilter() {
 8         FilterRegistrationBean registration = new FilterRegistrationBean();
 9         Filter myFilter = new DelegatingTracingFilter();
10         beanFactory.autowireBean(myFilter);
11         registration.setFilter(myFilter);
12         //registration.addUrlPatterns("/myfilterpath/*");
13         return registration;
14     }
15 }

 

  与之类似的还有下面的bean定义对应于原生Spring的servlet以及多个Filter:

 1 @Bean
 2 public ServletRegistrationBean dispatcherServlet() {
 3     ServletRegistrationBean registration = new ServletRegistrationBean(
 4             new DispatcherServlet(), "/");
 5     registration.setAsyncSupported(true);
 6     return registration;
 7 }
 8 
 9 @Bean
10 public Filter compositeFilter() {
11     CompositeFilter compositeFilter = new CompositeFilter();
12     compositeFilter.setFilters(ImmutableList.of(new CorsFilter(), shiroFilter));
13     return compositeFilter
14 }

 

posted on 2018-04-29 15:40  张叫兽的技术研究院  阅读(604)  评论(0编辑  收藏  举报

导航