Rumah Java javaTutorial Bagaimana untuk menghapuskan suis-case dalam Springboot

Bagaimana untuk menghapuskan suis-case dalam Springboot

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

Logik asas adalah seperti berikut:

 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:
    }
Salin selepas log masuk

Selepas menulisnya, anda akan mendapati bahawa apabila peristiwa meningkat, kod ini akan menjadi sangat panjang, dan fungsi pemprosesan setiap peristiwa juga tertumpu dalam satu kelas mudah diselenggara. Oleh itu, melalui carian dan pembelajaran, kami mendapati bahawa kami boleh menggunakan anotasi Springboot + mod strategi + kilang mudah untuk menghapuskan suis-case.

Refactor

Takrif struktur

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;
  }
}
Salin selepas log masuk

Tentukan anotasi

rreee

Definisi Pemprosesan acara antara muka

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

  CRSEvent value();
}
Salin selepas log masuk

Setiap kelas pemprosesan masa mesti melaksanakan antara muka ini. Antaranya, laksanakan ialah kaedah pemprosesan acara

Tulis kelas pemprosesan masa tertentu

Seterusnya, tulis kelas pemprosesan acara satu persatu, berikan yang berikut contoh:

public interface EventProcess {
  CRSResponse execute(CRSRequest resquest);
}
Salin selepas log masuk

Tentukan kelas alat SpringContext

@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;
  }
}
Salin selepas log masuk

Tentukan kilang kelas pemprosesan acara untuk menghasilkan pelbagai objek pemprosesan acara

@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;
  }
}
Salin selepas log masuk

Pengubahsuaian kod panggilan

@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);
  }
}
Salin selepas log masuk

Dengan cara ini, tiada kes suis dalam kod dan menambah acara juga sangat mudah Anda hanya perlu melaksanakan antara muka EventProcess.

Atas ialah kandungan terperinci Bagaimana untuk menghapuskan suis-case dalam Springboot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah perbezaan antara suis versi Jepun dan Hong Kong? Apakah perbezaan antara suis versi Jepun dan Hong Kong? Jun 20, 2023 pm 02:06 PM

Perbezaan antara suis versi Jepun dan versi Hong Kong: 1. Terdapat perbezaan besar dalam pengecas Versi Jepun dan port pengecasan standard kebangsaan adalah perkara biasa, dan versi Hong Kong menggunakan palam segitiga British; Versi Jepun menggunakan pembayaran kad mata, manakala versi Hong Kong menggunakan Alipay 3. , Waranti selepas jualan untuk versi Hong Kong perlu dihantar semula ke titik selepas jualan HK, manakala versi Jepun perlu diposkan kepada tempat selepas jualan yang ditetapkan di Jepun.

Apakah yang perlu saya lakukan jika suis tidak bertindak balas kepada TV? Apakah yang perlu saya lakukan jika suis tidak bertindak balas kepada TV? Jul 03, 2023 am 11:15 AM

Penyelesaian untuk suis tidak bertindak balas kepada TV: 1. Periksa sama ada bekalan kuasa suis dan TV disambungkan 2. Periksa sama ada antara muka kabel TV HDMI dipasang dengan ketat 3. Buka penutup belakang tapak Suis; dan periksa sama ada kord kuasa dan kabel HDMI dipasang dengan ketat 4. Periksa sama ada Suis dihidupkan dan dimasukkan ke dalam pangkalan 5. Periksa sama ada TV telah menukar sumber isyarat;

Bolehkah Elden's Ring dimainkan secara suis? Bolehkah Elden's Ring dimainkan secara suis? Mar 11, 2024 am 11:31 AM

Bolehkah Elden's Ring dimainkan pada suis? Sebagai permainan RPG aksi yang sangat menarik, ramai rakan mungkin tidak tahu sama ada ia boleh dimainkan dengan lancar pada platform suis. Bolehkah Ring of Elden dimainkan pada suis Jawapan: Ia tidak boleh dimainkan pada suis. Permainan aksi main peranan siri Souls yang dinanti-nantikan ini telah dikeluarkan secara rasmi Pemain boleh membelinya pada PC, PS4/5 dan Xbox Series eX|S/XboxOne dan mengalaminya dengan segera. Ramai rakan yang memiliki suis mungkin masih tidak sabar-sabar untuk menikmati permainan ini di NS, tetapi malangnya, tiada versi suis permainan. Mengikut keperluan konfigurasi laman web rasmi, konfigurasi permainan agak tinggi, dan sw

Bolehkah suis dicas pada pangkalan sepanjang masa? Bolehkah suis dicas pada pangkalan sepanjang masa? Jul 06, 2023 pm 04:51 PM

Suis tidak boleh diletakkan di tapak untuk mengecas sepanjang masa.

Analisis perbandingan dan perbezaan antara SpringBoot dan SpringMVC Analisis perbandingan dan perbezaan antara SpringBoot dan SpringMVC Dec 29, 2023 am 11:02 AM

SpringBoot dan SpringMVC adalah kedua-dua rangka kerja yang biasa digunakan dalam pembangunan Java, tetapi terdapat beberapa perbezaan yang jelas antara mereka. Artikel ini akan meneroka ciri dan penggunaan kedua-dua rangka kerja ini dan membandingkan perbezaannya. Mula-mula, mari belajar tentang SpringBoot. SpringBoot telah dibangunkan oleh pasukan Pivotal untuk memudahkan penciptaan dan penggunaan aplikasi berdasarkan rangka kerja Spring. Ia menyediakan cara yang pantas dan ringan untuk membina bersendirian, boleh dilaksanakan

Adakah switch32g mempunyai memori yang mencukupi? Adakah switch32g mempunyai memori yang mencukupi? Jun 20, 2023 pm 02:28 PM

Memori switch32g tidak mencukupi Sebabnya adalah seperti berikut: 1. Jika anda membeli permainan digital dan ingin membeli tangkapan skrin DLC dan menyimpannya dalam mesin pegang tangan, ia tidak mencukupi menyimpan kira-kira 2 hingga 3 permainan, yang tidak mencukupi Keperluan untuk bermain permainan; .

Apakah perbezaan antara suis lite dan suis Apakah perbezaan antara suis lite dan suis Jun 28, 2023 pm 02:13 PM

Perbezaan antara suis lite dan suis adalah: 1. Saiz yang berbeza; . Menyokong permainan yang berbeza 6. Warna yang berbeza.

Tutorial praktikal pembangunan SpringBoot+Dubbo+Nacos Tutorial praktikal pembangunan SpringBoot+Dubbo+Nacos Aug 15, 2023 pm 04:49 PM

Artikel ini akan menulis contoh terperinci untuk bercakap tentang perkembangan sebenar dubbo+nacos+Spring Boot. Artikel ini tidak akan merangkumi terlalu banyak pengetahuan teori, tetapi akan menulis contoh paling mudah untuk menggambarkan bagaimana dubbo boleh disepadukan dengan nacos untuk membina persekitaran pembangunan dengan cepat.

See all articles