Ответ
Spring Framework использует Project Reactor в качестве основной библиотеки для реактивного программирования.
Project Reactor предоставляет реализации Flux (для потоков 0..N элементов) и Mono (для 0..1 элемента), которые являются частью Reactive Streams стандарта.
Пример:
val flux: Flux<String> = Flux.just("Hello", "Reactive", "World")
.map { it.uppercase() }
.subscribe { println(it) }
Также Spring поддерживает интеграцию с RxJava, но Reactor — это native-решение для Spring WebFlux.
Ответ 18+ 🔞
А, ну слушай, вот эта вся тема с реактивщиной в Spring — это, бля, отдельная песня. Ты представляешь, они взяли и впилили туда Project Reactor, и теперь это, ёпта, их родная, так сказать, библия для всего этого асинхронного движа. Не то чтобы другое нельзя, но это — как базовая комплектация, понимаешь?
И главная фишка этого Reactor — две штуки: Flux и Mono. Ну, Flux — это когда тебе поток данных плывёт, от нуля до овердохуища элементов. А Mono — это такая штука, которая либо один элемент держит, либо нихуя. Просто, как тапок, но мощно, блядь.
Вот смотри, как это выглядит на практике, чтоб не быть голословным:
val flux: Flux<String> = Flux.just("Hello", "Reactive", "World")
.map { it.uppercase() }
.subscribe { println(it) }
Видишь? Берешь слова, хуяк — делаешь их заглавными, и потом подписываешься, чтобы они выводились. Красота, да? И всё это без блокирующих потоков, всё летает, как угорелое.
Ну и да, они, конечно, могут работать с RxJava, это как опциональная приблуда. Но зачем, если родной Reactor уже вшит, отполирован и, главное, доверия к нему — не ноль, а вполне себе. Так что если пишешь на Spring WebFlux, то Reactor — это твой, бля, лучший друг, хуй с горы. Всё остальное — уже по желанию и от большой смелости.