2017-09-07 3 views
0

J'ai implémenté des services Web de repos à l'aide de Spring. J'ai un code commun que je dois effectuer avant chaque service Web. Crête, j'appelle explicitement ce code commun au début de chaque service Web.Comment exécuter du code avant d'exécuter le service Web Spring

Existe-t-il un moyen pour que le ressort appelle automatiquement ce code commun avant d'appeler les services Web?

+1

Pouvez-vous définir "avant d'appeler des services Web? Voulez-vous dire une étape de configuration (initialisation d'un pool, chargement/préparation de ressources et de cartes, construction de tables de référence, etc.) ou voulez-vous dire quelque chose qui devrait être traité avant chaque appel au service? etc.)? – user2478398

+0

Avez-vous essayé des codes ?! Pouvez-vous les poster pour un scénario plus clair ?! –

+0

J'ai besoin de sauvegarder les informations de la requête, (navigateur, ip et version OS) J'ai besoin d'accéder à l'objet httpRequest pour le faire, au lieu de le faire manuellement avec chaque webservice, je demande si quelque chose est supporté par spring. –

Répondre

0

Vous devriez en utilisant l'interception ressort aop tous les services Web, et exécuter le code commun sur it.Like code suivant:

<bean id="aspect" class="com.zhuyiren.Aspect"/> 

<aop:config> 
    <aop:aspect ref="aspect"> 
     <aop:before method="before" pointcut="execution(* com.zhuyiren.service..*.*(..))"/> 
    </aop:aspect> 
</aop:config> 

Ce code ci-dessus signifie que le Invoke chaque méthode de certains haricots emballés à com.zhuyiren.service toujours exécuter la méthode common dans com.zhuyiren.Aspect .Vous pouvez écrire le code commun dans common method.Like:

public void common(){ 
    System.out.println("execute some common code"); 
} 

le cas de test:

public static void main(String[] args) throws Exception { 
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("test.xml"); 
    UserService service = context.getBean(UserService.class); 
    System.out.println(service.getUser(3)); 
} 

L'impression est:

execute some common code 
UserInfo{id=3, name='zhuyiren', password='123456', testString=[]} 
0

Jetez un oeil à HandlerInterceptorAdapter Vous pouvez étendre et extraire de demande toute information dont vous avez besoin

Meilleur

0

La réponse dépend du code que vous voulez exécuter.

Une technique consiste à utiliser AOP (comme décrit dans la réponse @dabaicai).

Une technique différente consiste à ajouter un filtre JEE pour traiter la requête avant qu'elle n'atteigne votre méthode de gestionnaire.

Voici quelques liens:

  1. JEE6 Tutorial Filtering Requests and Responses
  2. Oracle's Essentials of filters
  3. Mkyong's Spring JEE filters - prendre avec un grain de sel, Mkyong est la lumière sur l'explication.

Une autre option: recherche google pour "filtre ressort Jee"