У меня есть приложение весенней загрузки.
Вот мой код:
@Component
public class WebSocketHandler extends AbstractWebSocketHandler {
@Autowired
TestComponent testComponent;
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) {
testComponent.test();
}
}
Также у меня есть еще один класс здесь:
@Component
public class TestComponent {
public void test(){
System.out.println("lalala");
}
}
Вот мои зависимости из файла build.gradle:
dependencies {
compile group: 'org.springframework.boot:spring-boot-starter-web'
compile group: 'com.mashape.unirest', name: 'unirest-java', version: '1.4.9'
compile group: 'net.sourceforge.htmlunit', name: 'htmlunit', version: '2.33'
compile group: 'org.springframework.boot:spring-boot-starter-websocket'
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.5'
compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.8.1'
compile group: 'com.google.guava', name: 'guava', version: '27.1-jre'
}
Также вот мой основной весенний загрузочный файл:
@SpringBootApplication
@EnableConfigurationProperties({FileStorageProperties.class})
@EnableWebSocket
public class MyAppApplication implements WebSocketConfigurer{
public static void main(String[] args) {
SpringApplication.run(MyAppApplication.class, args);
}
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new WebSocketHandler(), "/socket1").setAllowedOrigins("*");
}
}
В сообщении websocket вызывается handleTextMessage (сеанс WebSocketSession, сообщение TextMessage), но компоненты с автопроводкой имеют нулевое значение.
Я проверил, создаю ли я какой-то новый метод в WebSocketHandler и аннотирую его с помощью @EventListener (ApplicationReadyEvent.class) при запуске приложения, testComponent доступен, но он все еще недоступен, когда handleTextMessage (сеанс WebSocketSession, сообщение TextMessage) вызывается из веб-сокета. Что-то не так с вызовом websocket!
Есть кто-нибудь с такой же проблемой?