Springboot で switch-case を削除する方法
基本的なロジックは次のとおりです。
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: }
書いてみると、イベントが増えるとコードが非常に長くなり、各イベントの処理機能も集中していることがわかります。 1 つのクラスで、メンテナンスが簡単です。そこで、検索と学習を通じて、Springboot のアノテーション、ストラテジー モード、シンプル ファクトリを使用して switch-case を排除できることがわかりました。
リファクタリング
構造の定義
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; } }
アノテーションの定義
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface CRSEventAnnotation { CRSEvent value(); }
定義イベント処理Interface
public interface EventProcess { CRSResponse execute(CRSRequest resquest); }
常時処理クラスはこのインターフェイスを実装する必要があります。このうち、execute はイベント処理メソッドです。
特定の時刻処理クラスを記述します
次に、イベント処理クラスを 1 つずつ記述し、次のようにします。例:
@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; } }
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; } }
イベント処理クラス ファクトリを定義してさまざまなイベント処理オブジェクトを生成します
@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); } }
コード変更の呼び出し
CRSEvent crsEvent = CRSEvent.valueOf(crsRequest.getEvent()); EventProcess eventProcess = EventProcessFactory.createEventProcess(crsEvent); if (eventProcess != null){ return eventProcess.execute(crsRequest); } return null;
この方法では、コード内に switch-case がなく、イベントの追加も非常に簡単で、EventProcess インターフェイスを実装するだけです。
以上がSpringboot で switch-case を削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











日本版スイッチと香港版スイッチの違い: 1. 充電器に大きな違いがあります. 日本版と国家標準の充電ポートは共通で、香港版は英国製三角プラグを使用しています; 2.日本語版はポイントカード支払い、香港版は Alipay を使用します。 3. 香港版のアフター保証は香港のアフターサービスポイントに返送する必要がありますが、日本語版は次の宛先に郵送する必要があります。日本国内の指定アフターサービス窓口となります。

1. Redis は分散ロックの原則を実装しており、分散ロックが必要な理由 分散ロックについて話す前に、分散ロックが必要な理由を説明する必要があります。分散ロックの反対はスタンドアロン ロックです。マルチスレッド プログラムを作成するとき、共有変数を同時に操作することによって引き起こされるデータの問題を回避します。通常、ロックを使用して共有変数を相互に除外し、データの正確性を確保します。共有変数の使用範囲は同じプロセス内です。共有リソースを同時に操作する必要があるプロセスが複数ある場合、どうすれば相互排他的になるのでしょうか?今日のビジネス アプリケーションは通常マイクロサービス アーキテクチャであり、これは 1 つのアプリケーションが複数のプロセスをデプロイすることも意味します。複数のプロセスが MySQL の同じレコード行を変更する必要がある場合、順序の乱れた操作によって引き起こされるダーティ データを避けるために、分散が必要です。今回導入するスタイルはロックされています。ポイントを獲得したい

スイッチがテレビに応答しない場合の解決策: 1. スイッチの電源とテレビが接続されているかどうかを確認します; 2. テレビの HDMI ケーブル インターフェイスがしっかりと差し込まれているかどうかを確認します; 3. スイッチ ベースの背面カバーを開きます電源コードと HDMI ケーブルがしっかりと接続されているかどうかを確認してください; 4. スイッチの電源がオンになっていて、ベースに差し込まれているかどうかを確認してください; 5. テレビの信号ソースが切り替えられているかどうかを確認してください。

スイッチは常にベースで充電できるわけではなく、次のような危険があります: 1. バッテリー寿命とバッテリー寿命が短くなる; 2. メモリが焼き切れる原因になります。

Springboot はファイルを読み取りますが、jar パッケージにパッケージ化した後、最新の開発にアクセスできません。jar パッケージにパッケージ化した後、Springboot がファイルを読み取れない状況があります。その理由は、パッケージ化後、ファイルの仮想パスが変更されるためです。は無効であり、ストリーム経由でのみアクセスできます。読み取ります。ファイルはリソースの下にあります publicvoidtest(){Listnames=newArrayList();InputStreamReaderread=null;try{ClassPathResourceresource=newClassPathResource("name.txt");Input

SpringBoot と SpringMVC はどちらも Java 開発で一般的に使用されるフレームワークですが、それらの間には明らかな違いがいくつかあります。この記事では、これら 2 つのフレームワークの機能と使用法を調べ、その違いを比較します。まず、SpringBoot について学びましょう。 SpringBoot は、Spring フレームワークに基づいたアプリケーションの作成と展開を簡素化するために、Pivotal チームによって開発されました。スタンドアロンの実行可能ファイルを構築するための高速かつ軽量な方法を提供します。

エルデンズ リングはスイッチでプレイできますか? 非常に魅力的なアクション RPG ゲームなので、スイッチ プラットフォームでスムーズにプレイできるかどうかを多くの友人が知らないかもしれません。答えは、現時点ではプレイできないということです。リング オブ エルデンはスイッチでプレイできますか? 回答: スイッチではプレイできません。 Souls シリーズのこの待望のロールプレイング アクション ゲームが正式にリリースされ、プレイヤーは PC、PS4/5、Xbox シリーズ eX|S/XboxOne で購入してすぐに体験することができます。スイッチを所有している多くの友人は、今でも NS でこのゲームを楽しみたいと考えているかもしれませんが、残念ながら、このゲームのスイッチ バージョンはありません。公式 Web サイトの構成要件によると、ゲーム構成は比較的高く、sw

1. RedisAPI のデフォルトのシリアル化メカニズムである RedisTemplate1.1 をカスタマイズします。API ベースの Redis キャッシュ実装では、データ キャッシュ操作に RedisTemplate テンプレートを使用します。ここで、RedisTemplate クラスを開いて、クラスのソース コード情報を表示します。publicclassRedisTemplateextendsRedisAccessorimplementsRedisOperations、BeanClassLoaderAware{//キーを宣言、値の各種シリアル化メソッド、初期値は空 @NullableprivateRedisSe
