Home Java javaTutorial How to eliminate switch-case in Springboot

How to eliminate switch-case in Springboot

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

The basic logic is as follows:

 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:
    }
Copy after login

After writing, you will find that as the events increase, this code will be very long, and the processing functions of each event are also concentrated in one class. Easy to maintain. Therefore, through search and learning, we found that we can use Springboot's annotation, strategy mode, and simple factory to eliminate switch-case.

Refactoring

Define 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;
  }
}
Copy after login

Define an annotation

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

  CRSEvent value();
}
Copy after login

Definition Event processing interface

public interface EventProcess {
  CRSResponse execute(CRSRequest resquest);
}
Copy after login

All time processing classes must implement this interface. Among them, execute is the event processing method

Write a specific time processing class

Next, write the event processing class one by one, give the following example:

@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;
  }
}
Copy after login

Define SpringContext tool class

@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;
  }
}
Copy after login

Define event processing class factory to produce various event processing objects

@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);
  }
}
Copy after login

Calling code modification

 CRSEvent crsEvent = CRSEvent.valueOf(crsRequest.getEvent());
 EventProcess eventProcess = EventProcessFactory.createEventProcess(crsEvent);
 if (eventProcess != null){
   return eventProcess.execute(crsRequest);
 }
return null;
Copy after login

In this way, there is no switch-case in the code, and adding an event is also very simple. You only need to implement the EventProcess interface.

The above is the detailed content of How to eliminate switch-case in Springboot. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

What are the differences between the Japanese and Hong Kong versions of switch? What are the differences between the Japanese and Hong Kong versions of switch? Jun 20, 2023 pm 02:06 PM

Differences between the Japanese version of the switch and the Hong Kong version: 1. There are major differences in the charger. The Japanese version and the national standard charging port are common, and the Hong Kong version uses a British triangle plug; 2. The Japanese version uses point card payment, while the Hong Kong version uses Alipay; 3. , The after-sales warranty for the Hong Kong version needs to be mailed back to the HK after-sales point, while the Japanese version needs to be mailed to the designated after-sales point in Japan.

Can Elden's Ring be played on switch? Can Elden's Ring be played on switch? Mar 11, 2024 am 11:31 AM

Can Elden's Ring be played on the switch? As a very charming action RPG game, many friends may not know whether it can be played smoothly on the switch platform. The answer is that it cannot be played at the moment. accomplish. Can Ring of Elden be played on switch? Answer: It cannot be played on switch. This highly anticipated Souls series role-playing action game has been officially released. Players can purchase it on PC, PS4/5 and Xbox Series eX|S/XboxOne and experience it immediately. Many friends who own a switch may still be eager to enjoy this game on the NS, but unfortunately, there is no switch version of the game. According to the official website configuration requirements, the game configuration is relatively high, and sw

What should I do if the switch does not respond to the TV? What should I do if the switch does not respond to the TV? Jul 03, 2023 am 11:15 AM

Solution for the switch not responding to the TV: 1. Check whether the power supply of the switch and the TV are connected; 2. Check whether the TV HDMI cable interface is plugged in tightly; 3. Open the back cover of the Switch base and check whether the power cord and HDMI cable are plugged in tightly; 4. Check whether the Switch is turned on and put into the base; 5. Check whether the TV has switched the signal source.

Can the switch be charged on the base all the time? Can the switch be charged on the base all the time? Jul 06, 2023 pm 04:51 PM

The switch cannot be charged on the base all the time. The hazards are: 1. Shortening the battery life and battery life; 2. Cause the memory to burn out.

Comparison and difference analysis between SpringBoot and SpringMVC Comparison and difference analysis between SpringBoot and SpringMVC Dec 29, 2023 am 11:02 AM

SpringBoot and SpringMVC are both commonly used frameworks in Java development, but there are some obvious differences between them. This article will explore the features and uses of these two frameworks and compare their differences. First, let's learn about SpringBoot. SpringBoot was developed by the Pivotal team to simplify the creation and deployment of applications based on the Spring framework. It provides a fast, lightweight way to build stand-alone, executable

Does switch32g have enough memory? Does switch32g have enough memory? Jun 20, 2023 pm 02:28 PM

The memory of switch32g is not enough. The reasons are as follows: 1. If you buy digital games and want to buy DLC screenshots and store them in the handheld machine, it is not enough. 2. When downloading digital games, 32G memory can store about 2 to 3 games, which is not enough. The need to play games; 3. Digital games and their DLC are generally maintained on 5G. Except for the space occupied by the built-in system, downloading games is more difficult for players.

SpringBoot+Dubbo+Nacos development practical tutorial SpringBoot+Dubbo+Nacos development practical tutorial Aug 15, 2023 pm 04:49 PM

This article will write a detailed example to talk about the actual development of dubbo+nacos+Spring Boot. This article will not cover too much theoretical knowledge, but will write the simplest example to illustrate how dubbo can be integrated with nacos to quickly build a development environment.

What is the difference between switch lite and switch What is the difference between switch lite and switch Jun 28, 2023 pm 02:13 PM

The differences between switch lite and switch are: 1. Different sizes; 2. Different screen sizes and body weights; 3. Different handles whether they are detachable and different handle functions; 4. Different battery life; 5. Different handle button designs; 6. Can Support different games; 6. Different colors.

See all articles