【问题标题】:How do I decorate a websocket handler within PerConnectionWebSocketHandler?如何在 PerConnectionWebSocketHandler 中装饰 websocket 处理程序?
【发布时间】:2015-02-26 06:10:29
【问题描述】:

我正在像这样使用 PerConnectionWebSocketHandler:

@Bean
public WebSocketHandler myHandler() {
    return new PerConnectionWebSocketHandler(MyHandler.class));
}

其中 MyHandler 是一个实现 Spring WebSocketHandler 接口的类。

我想添加一个异常处理装饰器,可以像这样创建单个实例:

new ExceptionWebSocketHandlerDecorator(new MyHandler() );

我需要 ExceptionWebSocketHandlerDecorator 由 PerConnectionWebSocketHandler 包装。当 ExceptionWebSocketHandlerDecorator 在外面时,MyHandler 抛出的异常导致 MyHandler.afterConnectionClosed 没有被调用。

如何将它与 PerConnectionWebSocketHandler 结合使用?

【问题讨论】:

    标签: java spring jakarta-ee spring-websocket


    【解决方案1】:

    WebSocketHandlers 可以相互嵌套:

    @Bean
    public WebSocketHandler myHandler() {
        return new PerConnectionWebSocketHandler(MyHandler.class));
    }
    
    @Bean
    public WebSocketHandler myHandlerDecorator() {
        return new ExceptionWebSocketHandlerDecorator(myHandler());
    }
    

    这是针对情况,当您打算使用 BeanFactory 自动连接您的目标 MyHandler 或通过简单的方式:

    @Bean
    public WebSocketHandler myHandlerDecorator() {
        return new ExceptionWebSocketHandlerDecorator(
                       new PerConnectionWebSocketHandler(MyHandler.class)));
    }
    

    如果没有。

    此外,您还可以考虑链接到LoggingWebSocketHandlerDecorator

    更新

    根据您的评论,我建议您编写自己的ExceptionWebSocketHandler 或在您的MyHandler 中实现所有ExceptionWebSocketHandlerDecorator 逻辑。这是因为PerConnectionWebSocketHandler 需要具有默认构造函数的类,即使它被委托给this.beanFactory.createBean(this.handlerType)

    更新2

    这种方法的困难在于我有多个处理程序,

    那么,你可以实现自己的PerConnectionExceptionWebSocketHandler!与ExceptionWebSocketHandlerDecoratorPerConnectionWebSocketHandler 的逻辑相同。或者只是扩展 PerConnectionWebSocketHandler 并覆盖您需要的内容。

    【讨论】:

    • 谢谢,但我需要 ExceptionWebSocketHandlerDecorator 由 PerConnectionWebSocketHandler 包装。当 ExceptionWebSocketHandlerDecorator 在外面时,MyHandler 抛出的异常导致 MyHandler.afterConnectionClosed 没有被调用。
    • 是的,这就是让它工作的秘诀。这种方法的困难在于我有多个处理程序,并且我必须在每个处理程序中重新实现 ExceptionWebSocketHandlerDecorator。我希望有一个更优雅的解决方案。
    猜你喜欢
    • 2019-07-02
    • 2011-03-02
    • 2019-10-17
    • 1970-01-01
    • 2016-04-10
    • 2021-11-14
    • 2015-03-03
    • 2019-10-01
    • 2022-10-07
    相关资源
    最近更新 更多