如何装饰 PerConnectionWebSocketHandler 中的 websocket 处理程序?
How do I decorate a websocket handler within PerConnectionWebSocketHandler?
我是这样使用 PerConnectionWebSocketHandler 的:
@Bean
public WebSocketHandler myHandler() {
return new PerConnectionWebSocketHandler(MyHandler.class));
}
其中 MyHandler 是 class 实现 Spring WebSocketHandler 接口。
我想添加一个异常处理装饰器,对于单个实例可以这样创建:
new ExceptionWebSocketHandlerDecorator(new MyHandler() );
我需要 ExceptionWebSocketHandlerDecorator 由 PerConnectionWebSocketHandler 包装。当 ExceptionWebSocketHandlerDecorator 在外面时,MyHandler 抛出的异常导致 MyHandler.afterConnectionClosed 没有被调用。
如何将其与 PerConnectionWebSocketHandler 结合使用?
WebSocketHandler
可以相互嵌套:
@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
需要 class 和默认构造函数,即使它被委托给 this.beanFactory.createBean(this.handlerType)
.
更新2
The difficulty with this approach is that I have more than one handler,
好吧,那你可以实现自己的PerConnectionExceptionWebSocketHandler
!与 ExceptionWebSocketHandlerDecorator
和 PerConnectionWebSocketHandler
的逻辑相同。或者只是扩展 PerConnectionWebSocketHandler
并覆盖你需要的。
我是这样使用 PerConnectionWebSocketHandler 的:
@Bean
public WebSocketHandler myHandler() {
return new PerConnectionWebSocketHandler(MyHandler.class));
}
其中 MyHandler 是 class 实现 Spring WebSocketHandler 接口。
我想添加一个异常处理装饰器,对于单个实例可以这样创建:
new ExceptionWebSocketHandlerDecorator(new MyHandler() );
我需要 ExceptionWebSocketHandlerDecorator 由 PerConnectionWebSocketHandler 包装。当 ExceptionWebSocketHandlerDecorator 在外面时,MyHandler 抛出的异常导致 MyHandler.afterConnectionClosed 没有被调用。
如何将其与 PerConnectionWebSocketHandler 结合使用?
WebSocketHandler
可以相互嵌套:
@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
需要 class 和默认构造函数,即使它被委托给 this.beanFactory.createBean(this.handlerType)
.
更新2
The difficulty with this approach is that I have more than one handler,
好吧,那你可以实现自己的PerConnectionExceptionWebSocketHandler
!与 ExceptionWebSocketHandlerDecorator
和 PerConnectionWebSocketHandler
的逻辑相同。或者只是扩展 PerConnectionWebSocketHandler
并覆盖你需要的。