我正在使用PerConnectionWebSocketHandler:
@Bean
public WebSocketHandler myHandler() {
return new PerConnectionWebSocketHandler(MyHandler.class));
}
其中MyHandler是一个实现Spring WebSocketHandler接口的类。
我想添加一个异常处理装饰器,可以像这样创建单个实例:
new ExceptionWebSocketHandlerDecorator(new MyHandler() );
我需要PerceptionWebSocketHandlerDecorator包装PerConnectionWebSocketHandler。当ExceptionWebSocketHandlerDecorator在外部时,MyHandler抛出的异常导致MyHandler.afterConnectionClosed未被调用。
如何将其与PerConnectionWebSocketHandler结合使用?
答案 0 :(得分:2)
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
或在ExceptionWebSocketHandlerDecorator
中实施所有MyHandler
逻辑。这是因为PerConnectionWebSocketHandler
要求具有默认构造函数的类,即使它被委托给this.beanFactory.createBean(this.handlerType)
。
<强> UPDATE2 强>
这种方法的难点在于我有多个处理程序,
那么你可以实现自己的PerConnectionExceptionWebSocketHandler
!使用ExceptionWebSocketHandlerDecorator
和PerConnectionWebSocketHandler
中的相同逻辑。或者只是扩展PerConnectionWebSocketHandler
并覆盖您需要的内容。