Java config for spring interceptor où interceptor utilise des haricots de printemps auto-alimentés

je veux ajouter MVC interceptor de printemps dans la config Java. J'ai déjà une configuration basée sur xml pour cela, mais j'essaie de passer à une configuration Java. Pour les intercepteurs, je sais que cela peut être fait comme ceci à partir du printemps de la documentation-

@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

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

}

Mais mon interceptor est à l'aide d'un ressort de haricots autocâblés comme suit:

public class LocaleInterceptor extends HandlerInterceptorAdaptor {

    @Autowired
    ISomeService someService;

    ...
}

Le SomeService classe ressemble à la suivante-

@Service
public class SomeService implements ISomeService {

   ...
}

j'utilise des annotations comme @Service pour scanner les grains et ne les ont pas spécifié dans la classe de configuration comme @Bean

d'après ce que j'ai compris, étant donné que java config utilise du nouveau pour créer l'objet, spring n'injectera pas automatiquement les dépendances.

Comment puis-je ajouter des intercepteurs comme celui-ci dans la config java?

25
demandé sur user3565529 2014-04-28 23:01:52
la source

3 ответов

il suffit de faire la commande suivante:

@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Bean
    LocaleInterceptor localInterceptor() {
         return new LocalInterceptor();
    }

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

}

bien sûr LocaleInterceptor doit être configuré en tant que balise quelque part (XML, Java Config ou en utilisant des annotations) pour le champ pertinent de WebConfig pour obtenir de l'injection.

la documentation pour la personnalisation générale de la configuration MVC du ressort peut être trouvée ici, et en particulier pour les Intercepteurs de voir

44
répondu geoand 2016-07-29 13:31:39
la source

quand vous manipulez la création d'objet pour vous-même comme dans:

registry.addInterceptor(new LocaleInterceptor());

il n'y a aucun moyen que le conteneur à ressort puisse gérer cet objet pour vous et donc faire l'injection nécessaire dans votre LocaleInterceptor.

une autre façon qui pourrait être plus commode pour votre situation, est de déclarer le managé @Bean dans le @Configuration et d'utiliser la méthode directement, comme suit:

@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Bean
    public LocaleInterceptor localeInterceptor() {
        return new LocaleInterceptor();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor( localeInterceptor() );
    }
}
12
répondu José Andias 2015-01-21 19:00:02
la source

essayez d'injecter votre service comme paramètre de constructeur. C'est simple.

@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

   @Autowired
   ISomeService someService;

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

}

alors reconfigurez votre intercepteur,

public class LocaleInterceptor extends HandlerInterceptorAdaptor {


     private final ISomeService someService;

     public LocaleInterceptor(ISomeService someService) {
         this.someService = someService;
     }


}

Cheers !

7
répondu oko 2014-05-01 16:11:25
la source

Autres questions sur