Java config for spring interceptor where interceptor is using autowired spring beans

后端 未结 3 1151
情书的邮戳
情书的邮戳 2020-12-08 14:01

I want to add spring mvc interceptor as part of Java config. I already have a xml based config for this but I am trying to move to a Java config. For interceptors, I know th

相关标签:
3条回答
  • 2020-12-08 14:32

    When you handle the object creation for yourself like in:

    registry.addInterceptor(new LocaleInterceptor());
    

    there is no way the Spring container can manage that object for you and therefore make the necessary injection into your LocaleInterceptor.

    Another way that could be more convenient for your situation, is to declare the managed @Bean in the @Configuration and use the method directly, like so:

    @EnableWebMvc
    @Configuration
    public class WebConfig extends WebMvcConfigurerAdapter {
    
        @Bean
        public LocaleInterceptor localeInterceptor() {
            return new LocaleInterceptor();
        }
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor( localeInterceptor() );
        }
    }
    
    0 讨论(0)
  • 2020-12-08 14:39

    Just do the following:

    @EnableWebMvc
    @Configuration
    public class WebConfig extends WebMvcConfigurerAdapter {
    
        @Bean
        LocaleInterceptor localInterceptor() {
             return new LocalInterceptor();
        }
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(localeInterceptor());
        }
    
    }
    

    Of course LocaleInterceptor needs to be configured as a Spring bean somewhere (XML, Java Config or using annotations) in order for the relevant field of WebConfig to get injected.

    The documentation for general customization of Spring's MVC configuration can be found here, and specifically for Interceptors see this section

    0 讨论(0)
  • 2020-12-08 14:47

    Try to inject your service as a constructor parameter. It is simple.

    @EnableWebMvc
    @Configuration
    public class WebConfig extends WebMvcConfigurerAdapter {
    
       @Autowired
       ISomeService someService;
    
       @Override
       public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new LocaleInterceptor(someService));
       }
    
    }
    

    Then reconfigure your interceptor,

    public class LocaleInterceptor extends HandlerInterceptorAdaptor {
    
    
         private final ISomeService someService;
    
         public LocaleInterceptor(ISomeService someService) {
             this.someService = someService;
         }
    
    
    }
    

    Cheers !

    0 讨论(0)
提交回复
热议问题