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

user3565529 picture user3565529 · Apr 28, 2014 · Viewed 50.5k times · Source

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 that it can be done like this from the spring documentation-

@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LocaleInterceptor());
    }

}

But my interceptor is using a spring bean autowired into it like follows-

public class LocaleInterceptor extends HandlerInterceptorAdaptor {

    @Autowired
    ISomeService someService;

    ...
}

The SomeService class looks like follows-

@Service
public class SomeService implements ISomeService {

   ...
}

I am using annotations like @Service for scanning the beans and have not specified them in the configuration class as @Bean

As my understanding, since java config uses new for creating the object, spring will not automatically inject the dependencies into it.

How can I add the interceptors like this as part of the java config?

Answer

geoand picture geoand · Apr 28, 2014

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