WebSocketHandlerDecorator的使用方法
使用Spring整合WebSocket實時通信技術(shù),在消息處理過程中,如果消息處理的邏輯很多,會造成消息處理類的代碼臃腫,代碼冗長;此時可以借助于Spring為我們提供的WebSocketHandlerDecorator裝飾類,來分離不同的邏輯處理部分,使得代碼清晰起來
參考Spring文檔:https://docs.spring.io/spring-framework/docs/5.3.4/reference/html/web.html#websocket
SpringBoot版本 2.4.5
WebSocketHandlerDecorator的用途
降低代碼耦合度
動態(tài)增加類的行為
符合單一職責的設(shè)計原則
符合開閉原則的設(shè)計原則
使用方式
Spring為我們提供的WebSocketHandlerDecorator裝飾者類,是裝飾者模式的實現(xiàn),基于該類,可以用它裝飾一些具有額外行為的消息處理器
舉例~
假如我們通過WebSocket收到的消息需要持久化到數(shù)據(jù)庫中,elasticsearch搜索引擎中,便于后續(xù)業(yè)務流程中用到,這時就可以用WebSocketHandlerDecorator來裝飾之前編寫的消息處理類,不需要修改之前的消息處理類代碼!
以下給出示例代碼,來演示W(wǎng)ebSocketHandlerDecorator的使用過程
1.新建PersistenceToDatabaseWebSocketHandlerDecorator,來處理消息持久化到數(shù)據(jù)庫的邏輯

2.新建PersistenceToElasticsearchWebSocketHandlerDecorator,來處理消息持久化到elasticsearch的邏輯

3.配置裝飾類生效,將消息處理類一層層的傳入構(gòu)造函數(shù)中

運行效果
啟動工程,通過前端代碼發(fā)送消息來測試
完整前端代碼參考:https://github.com/netbuffer/UItest/blob/master/websocket/index.html

觀察后端日志輸出,可以看到我們的裝飾類相應邏輯已經(jīng)運行了

如果后續(xù)不需要將消息寫入數(shù)據(jù)庫或者elasticsearch中,那就可以修改消息處理類的配置部分,將裝飾類刪除,而不需要直接修改原有的消息處理代碼部分

完整測試工程參考:https://github.com/netbuffer/spring-boot-websocket-demo


