Heim Java javaLernprogramm So beseitigen Sie Switch-Case in Springboot

So beseitigen Sie Switch-Case in Springboot

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

Die Grundlogik lautet wie folgt:

 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:
    }
Nach dem Login kopieren

Nachdem Sie es geschrieben haben, werden Sie feststellen, dass dieser Code mit zunehmender Anzahl von Ereignissen sehr lang wird und die Verarbeitungsfunktionen jedes einzelnen Auch die Konzentration von Ereignissen auf eine Klasse ist schwierig aufrechtzuerhalten. Daher haben wir durch Suchen und Lernen herausgefunden, dass wir Springboots Anmerkungen + Strategiemodus + einfache Fabrik verwenden können, um Switch-Case zu eliminieren.

Refactoring

Struktur definieren

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;
  }
}
Nach dem Login kopieren

Annotation definieren# 🎜🎜 #

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

  CRSEvent value();
}
Nach dem Login kopieren
Ereignisverarbeitungsschnittstelle definieren


public interface EventProcess {
  CRSResponse execute(CRSRequest resquest);
}
Nach dem Login kopieren
Alle Zeitverarbeitungsklassen müssen diese Schnittstelle implementieren. Darunter ist die Ausführung die Ereignisverarbeitungsmethode

Schreiben Sie eine bestimmte Zeitverarbeitungsklasse

Als nächstes schreiben Sie die Ereignisverarbeitung nacheinander Eine Klasse, nehmen Sie das folgende Beispiel:

@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;
  }
}
Nach dem Login kopieren
SpringContext-Toolklasse definieren


@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;
  }
}
Nach dem Login kopieren
Ereignisverarbeitungsklassenfabrik definieren, um verschiedene Ereignisverarbeitungsobjekte zu erzeugen#🎜🎜 ## 🎜🎜#
@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);
  }
}
Nach dem Login kopieren

Codeänderung aufrufen

 CRSEvent crsEvent = CRSEvent.valueOf(crsRequest.getEvent());
 EventProcess eventProcess = EventProcessFactory.createEventProcess(crsEvent);
 if (eventProcess != null){
   return eventProcess.execute(crsRequest);
 }
return null;
Nach dem Login kopieren

Auf diese Weise muss der Code nicht umgeschaltet werden, und das Hinzufügen eines Ereignisses ist ebenfalls sehr einfach Implementieren Sie die EventProcess-Schnittstelle.

Das obige ist der detaillierte Inhalt vonSo beseitigen Sie Switch-Case in Springboot. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was sind die Unterschiede zwischen der japanischen und der Hongkong-Version von Switch? Was sind die Unterschiede zwischen der japanischen und der Hongkong-Version von Switch? Jun 20, 2023 pm 02:06 PM

Unterschiede zwischen der japanischen Version des Schalters und der Hongkong-Version: 1. Es gibt große Unterschiede beim Ladegerät. Die japanische Version und der nationale Standard-Ladeanschluss sind üblich, und die Hongkong-Version verwendet einen britischen Dreiecksstecker Die japanische Version nutzt Punktekartenzahlung, während die Hongkong-Version Alipay 3 verwendet. Die Kundendienstgarantie für die Hongkong-Version muss an die HK-Kundendienststelle zurückgeschickt werden, während die japanische Version per Post an die Kundendienststelle geschickt werden muss die angegebene Kundendienststelle in Japan.

Was soll ich tun, wenn der Schalter nicht auf den Fernseher reagiert? Was soll ich tun, wenn der Schalter nicht auf den Fernseher reagiert? Jul 03, 2023 am 11:15 AM

Lösung für den Fall, dass der Schalter nicht auf das Fernsehgerät reagiert: 1. Überprüfen Sie, ob die Stromversorgung des Schalters und des Fernsehgeräts angeschlossen ist. 2. Überprüfen Sie, ob die HDMI-Kabelschnittstelle des Fernsehgeräts fest eingesteckt ist. 3. Öffnen Sie die hintere Abdeckung der Schalterbasis und überprüfen Sie, ob das Netzkabel und das HDMI-Kabel fest eingesteckt sind. 4. Überprüfen Sie, ob der Schalter eingeschaltet und in die Basis gesteckt ist. 5. Überprüfen Sie, ob das Fernsehgerät die Signalquelle umgeschaltet hat.

Kann Elden's Ring auf der Switch gespielt werden? Kann Elden's Ring auf der Switch gespielt werden? Mar 11, 2024 am 11:31 AM

Kann Elden's Ring auf der Switch gespielt werden? Viele Freunde wissen möglicherweise nicht, ob es derzeit reibungslos gespielt werden kann. Kann Ring of Elden auf dem Switch gespielt werden? Antwort: Es kann nicht auf dem Switch gespielt werden. Dieses mit Spannung erwartete Rollenspiel-Actionspiel der Souls-Serie wurde offiziell für PC, PS4/5 und Xbox Series eX|S/XboxOne veröffentlicht und kann es sofort erleben. Viele Freunde, die eine Switch besitzen, möchten dieses Spiel vielleicht immer noch auf NS genießen, aber leider gibt es keine Switch-Version dieses Spiels. Gemäß den offiziellen Konfigurationsanforderungen der Website ist die Spielkonfiguration relativ hoch und sw

Kann der Switch ständig an der Basis aufgeladen werden? Kann der Switch ständig an der Basis aufgeladen werden? Jul 06, 2023 pm 04:51 PM

Der Schalter kann nicht ständig an der Basis aufgeladen werden. Die Gefahren sind: 1. Verkürzung der Batterielebensdauer und 2. Verursachen Sie ein Durchbrennen des Speichers.

Vergleich und Differenzanalyse zwischen SpringBoot und SpringMVC Vergleich und Differenzanalyse zwischen SpringBoot und SpringMVC Dec 29, 2023 am 11:02 AM

SpringBoot und SpringMVC sind beide häufig verwendete Frameworks in der Java-Entwicklung, es gibt jedoch einige offensichtliche Unterschiede zwischen ihnen. In diesem Artikel werden die Funktionen und Verwendungsmöglichkeiten dieser beiden Frameworks untersucht und ihre Unterschiede verglichen. Lassen Sie uns zunächst etwas über SpringBoot lernen. SpringBoot wurde vom Pivotal-Team entwickelt, um die Erstellung und Bereitstellung von Anwendungen auf Basis des Spring-Frameworks zu vereinfachen. Es bietet eine schnelle und einfache Möglichkeit, eigenständige, ausführbare Dateien zu erstellen

Hat switch32g genügend Speicher? Hat switch32g genügend Speicher? Jun 20, 2023 pm 02:28 PM

Der Speicher von switch32g reicht nicht aus: 1. Wenn Sie eine digitale Version des Spiels kaufen und DLC-Screenshots kaufen und auf dem Handheld-Gerät speichern möchten, reicht dies nicht aus In der digitalen Version des Spiels können etwa 2 bis 3 Spiele gespeichert werden, was nicht ausreicht. Digitale Spiele und deren DLC werden im Allgemeinen auf 5G verwaltet. Im System ist das Herunterladen von Spielen für Spieler schwieriger.

Praktisches Tutorial zur SpringBoot+Dubbo+Nacos-Entwicklung Praktisches Tutorial zur SpringBoot+Dubbo+Nacos-Entwicklung Aug 15, 2023 pm 04:49 PM

In diesem Artikel wird ein detailliertes Beispiel geschrieben, um über die tatsächliche Entwicklung von Dubbo + Nacos + Spring Boot zu sprechen. In diesem Artikel wird nicht zu viel theoretisches Wissen behandelt, sondern das einfachste Beispiel wird geschrieben, um zu veranschaulichen, wie Dubbo in Nacos integriert werden kann, um schnell eine Entwicklungsumgebung aufzubauen.

Was ist der Unterschied zwischen Switch Lite und Switch Was ist der Unterschied zwischen Switch Lite und Switch Jun 28, 2023 pm 02:13 PM

Die Unterschiede zwischen Switch Lite und Switch sind: 1. Unterschiedliche Größen und Gehäusegewichte; 3. Unterschiedliche Griffe; unterschiedliche Grifffunktionen; . Unterstützt verschiedene Spiele; 6. Verschiedene Farben.

See all articles