Maison Java javaDidacticiel Comment éliminer le switch-case dans Springboot

Comment éliminer le switch-case dans Springboot

May 14, 2023 pm 07:49 PM
switch springboot case

La logique de base est la suivante :

 String event = crsRequest.getEvent();
    CRSResponse crsResponse = null;
    switch (event) {
      case CRSRequestEvent.APP_START:
        crsResponse = processAppStartCommand(crsRequest);
        break;
      case CRSRequestEvent.INIT_COMPLETE:
        crsResponse = processInitCompleteCommand(crsRequest);
        break;
      case CRSRequestEvent.COLLECT_COMPLETE:
        crsResponse = processCollectCompleteCommand(crsRequest);
        break;
      case CRSRequestEvent.COLLECT_NO_INPUT:
        crsResponse = processCollectNoInputCommand(crsRequest);
        break;
      case CRSRequestEvent.PLAY_COMPLETE:
        crsResponse = processPlayCompleteCommand(crsRequest);
        break;
      default:
    }
Copier après la connexion

Après l'avoir écrit, vous constaterez qu'à mesure que les événements augmentent, ce code sera très long, et les fonctions de traitement de chaque événement sont également concentrées dans une seule classe, ce qui est difficile à maintenir. Par conséquent, grâce à la recherche et à l'apprentissage, nous avons découvert que nous pouvons utiliser les annotations + le mode stratégie + l'usine simple de Springboot pour éliminer le cas de commutation.

Refactor

Définir la structure

public enum CRSEvent {
  APP_START("APP_START"),
  INIT_COMPLETE("INIT_COMPLETE"),
  PLAY_COMPLETE("PLAY_COMPLETE"),
  COLLECT_COMPLETE("COLLECT_COMPLETE"),
  COLLECT_NO_INPUT("COLLECT_NO_INPUT"),
  APP_END("APP_END"),
  RESP_ERROR_CMD("RESP_ERROR_CMD");

  private String event;

  CRSEvent(String event){
    this.event = event;
  }
  
  public String getEvent() {
    return event;
  }

  public void setEvent(String event) {
    this.event = event;
  }
}
Copier après la connexion

Définir une annotation

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface CRSEventAnnotation {

  CRSEvent value();
}
Copier après la connexion

Définir l'interface de traitement des événements

public interface EventProcess {
  CRSResponse execute(CRSRequest resquest);
}
Copier après la connexion

Toutes les classes de traitement du temps doivent implémenter cette interface. Parmi eux, exécuter est la méthode de traitement des événements

Écrivez une classe de traitement du temps spécifique

Ensuite, écrivez les classes de traitement des événements une par une, prenez l'exemple suivant :

@Component("appStartProcess")
@CRSEventAnnotation(value = CRSEvent.APP_START)
public class AppStartProcess implements EventProcess{

  @Override
  public CRSResponse execute(CRSRequest resquest) {
    CRSResponse response = new CRSResponse();
    response.setCommand(CRSResponseCmd.IVR_SESSION_INIT);
    CRSResponse.Message message = new CRSResponse.Message();
    message.setTts_vid("65580");
    message.setTts_speed("120");
    response.setMessage(message);
    return response;
  }
}
Copier après la connexion

Définissez la classe d'outils SpringContext

@Component
public class SpringContextUtil implements ApplicationContextAware{

  private ApplicationContext context;

  public ApplicationContext getContext(){
    return context;
  }

  @Override
  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    this.context = applicationContext;
  }
}
Copier après la connexion

Définir une usine de classe de traitement d'événements, utilisée pour produire divers objets de traitement d'événements

@Component
public class EventProcessFactory {

  @Autowired
  SpringContextUtil contextUtil;

  private static Map<CRSEvent, EventProcess> eventProcessMap = new ConcurrentHashMap<>();

  public EventProcessFactory() {
    Map<String, Object> beanMap = contextUtil.getContext().getBeansWithAnnotation(CRSEventAnnotation.class);

    for (Object evetProcess : beanMap.values()) {
      CRSEventAnnotation annotation = evetProcess.getClass().getAnnotation(CRSEventAnnotation.class);
      eventProcessMap.put(annotation.value(), (EventProcess) evetProcess);
    }
  }
  
  public static EventProcess createEventProcess(CRSEvent event){
    return eventProcessMap.get(event);
  }
}
Copier après la connexion

Modification du code d'appel

 CRSEvent crsEvent = CRSEvent.valueOf(crsRequest.getEvent());
 EventProcess eventProcess = EventProcessFactory.createEventProcess(crsEvent);
 if (eventProcess != null){
   return eventProcess.execute(crsRequest);
 }
return null;
Copier après la connexion

De cette façon, le code n'a pas de cas de commutation, et l'ajout d'un événement est également très simple, il suffit d'implémenter EventProcess interface.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelles sont les différences entre les versions japonaise et hongkongaise de Switch ? Quelles sont les différences entre les versions japonaise et hongkongaise de Switch ? Jun 20, 2023 pm 02:06 PM

Différences entre la version japonaise du commutateur et la version de Hong Kong : 1. Il existe des différences majeures dans le chargeur. La version japonaise et le port de charge standard national sont communs, et la version de Hong Kong utilise une prise triangulaire britannique. La version japonaise utilise le paiement par carte à points, tandis que la version de Hong Kong utilise Alipay ; 3. , La garantie après-vente pour la version de Hong Kong doit être renvoyée par courrier au point après-vente de Hong Kong, tandis que la version japonaise doit être envoyée par courrier à le point après-vente désigné au Japon.

Que dois-je faire si mon switch ne répond pas au téléviseur ? Que dois-je faire si mon switch ne répond pas au téléviseur ? Jul 03, 2023 am 11:15 AM

Solution pour le commutateur qui ne répond pas lorsqu'il est connecté au téléviseur : 1. Vérifiez si l'alimentation du commutateur et le téléviseur sont connectés. 2. Vérifiez si l'interface du câble HDMI du téléviseur est bien branchée. 3. Ouvrez le capot arrière du téléviseur ; Changez la base et vérifiez si le cordon d'alimentation et le câble HDMI sont bien branchés ; 4. Vérifiez si le commutateur est allumé et placé dans la base ; 5. Vérifiez si le téléviseur a changé la source du signal.

Elden's Ring peut-il être joué sur Switch ? Elden's Ring peut-il être joué sur Switch ? Mar 11, 2024 am 11:31 AM

Elden's Ring peut-il être joué sur la plateforme Switch ? En tant que jeu d'action RPG très charmant, de nombreux amis ne savent peut-être pas s'il peut être joué sans problème sur la plateforme Switch. La réponse est qu'il ne peut pas être joué pour le moment. Ring of Elden peut-il être joué sur Switch ? Réponse : Il ne peut pas être joué sur Switch. Ce jeu d'action et de rôle très attendu de la série Souls est officiellement sorti. Les joueurs peuvent l'acheter sur PC, PS4/5 et Xbox Series eX|S/XboxOne et en faire l'expérience immédiatement. De nombreux amis possédant un Switch sont peut-être encore impatients de profiter de ce jeu sur NS, mais malheureusement, il n'existe pas de version Switch de ce jeu. Selon les exigences de configuration du site officiel, la configuration du jeu est relativement élevée et sw

Le switch peut-il être chargé sur la base tout le temps ? Le switch peut-il être chargé sur la base tout le temps ? Jul 06, 2023 pm 04:51 PM

L'interrupteur ne peut pas être chargé sur la base tout le temps. Les risques sont les suivants : 1. Réduire la durée de vie de la batterie et la durée de vie de la batterie. 2. Faire griller la mémoire.

Comparaison et analyse des différences entre SpringBoot et SpringMVC Comparaison et analyse des différences entre SpringBoot et SpringMVC Dec 29, 2023 am 11:02 AM

SpringBoot et SpringMVC sont tous deux des frameworks couramment utilisés dans le développement Java, mais il existe des différences évidentes entre eux. Cet article explorera les fonctionnalités et les utilisations de ces deux frameworks et comparera leurs différences. Tout d’abord, découvrons SpringBoot. SpringBoot a été développé par l'équipe Pivotal pour simplifier la création et le déploiement d'applications basées sur le framework Spring. Il fournit un moyen rapide et léger de créer des fichiers exécutables autonomes.

Le switch32g a-t-il suffisamment de mémoire ? Le switch32g a-t-il suffisamment de mémoire ? Jun 20, 2023 pm 02:28 PM

La mémoire du switch32g n'est pas suffisante. Les raisons sont les suivantes : 1. Si vous souhaitez acheter la version numérique du jeu et que vous souhaitez acheter des captures d'écran DLC et les stocker dans la machine portable, ce n'est pas suffisant. version numérique du jeu, 32 Go de mémoire permettent de stocker environ 2 à 3 jeux, ce qui n'est pas suffisant. Le besoin de jouer à des jeux ; 3. Les jeux numériques et leurs DLC sont généralement maintenus sur la 5G. dans le système, le téléchargement de jeux est plus difficile pour les joueurs.

Quelle est la différence entre Switch Lite et Switch Quelle est la différence entre Switch Lite et Switch Jun 28, 2023 pm 02:13 PM

Les différences entre Switch Lite et Switch sont : 1. Différentes tailles ; 2. Différentes tailles d'écran et poids corporels ; 3. Différentes poignées, si elles sont détachables et différentes fonctions de poignée ; 4. Différentes durées de vie de la batterie ; . Supporte différents jeux ; 6. Différentes couleurs.

Tutoriel pratique de développement SpringBoot+Dubbo+Nacos Tutoriel pratique de développement SpringBoot+Dubbo+Nacos Aug 15, 2023 pm 04:49 PM

Cet article écrira un exemple détaillé pour parler du développement réel de dubbo+nacos+Spring Boot. Cet article ne couvrira pas trop de connaissances théoriques, mais écrira l'exemple le plus simple pour illustrer comment dubbo peut être intégré à nacos pour créer rapidement un environnement de développement.

See all articles