Как использовать автоматические компоненты с пружинной загрузкой? - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть приложение весенней загрузки. Вот мой код:

@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! Есть кто-нибудь с такой же проблемой?

...