Мое решение:
Создайте интерфейс для использования на компонентах, которые вы хотите инициализировать:
public interface WebSocketSessionPrematureInitialization {
default void initialize() {}
}
Создайте компонент для инициализации всех компонентов, которые реализуют интерфейс:
@Component
@Scope(scopeName = "websocket", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class WebSocketBeanInitializer {
private final List<? extends WebSocketSessionPrematureInitialization> wsInit;
@Autowired
public WebSocketBeanInitializer(List<? extends WebSocketSessionPrematureInitialization> wsInit) {
this.wsInit = wsInit;
}
public void initialize() {
for (WebSocketSessionPrematureInitialization bean : wsInit)
bean.initialize();
}
}
Теперь вам просто нужно вызывать метод initialize () WebSocketBeanInitializer всегда, когда создается новый сеанс.