Spring предлагает вам единообразный способ управления зависимостями между вашими объектами.Это называется инверсией управления или внедрением зависимости.С его помощью вы можете создавать подключаемый, тестируемый код, который легко поддерживать.
Кроме того, он предоставляет вам gazillion служебных классов, которые просто облегчают жизнь.Например, Hibernate гораздо проще поддерживать с помощью средств Spring.Это своего рода объединяет много разных технологий под одной крышей.Spring with Hibernate в последние несколько лет является одной из наиболее предпочтительных архитектур для разработки веб-приложений на Java.
Теперь, перейдя к JSF, JSF является средой для динамического генерирования HTML на стороне сервера.Там вы можете динамически генерировать HTML-элементы непосредственно на основе ваших Java-объектов.Модель JSF вышла из моды.Он рассматривается как унаследованная инфраструктура от современных структур Javascript с бэкэндом API RESTful.Это переместило Java для реализации микросервисов RESTful.Этот подход часто может масштабироваться лучше, чем JSF.
Основная сила JSF заключается в компонентных структурах в экосистеме JSF.В частности, PrimeFaces или служебные библиотеки, такие как omnifaces.Они позволяют быстро приступить к работе над проектами, имеют множество примеров и особенно подходят для команды или проектов, где разработчикам не хватает навыков внешнего интерфейса.Модель развертывания часто проста, с одним файлом war или ear на сервер.
Поэтому, учитывая масштабируемость, я бы рекомендовал вам использовать Spring Boot Rest Servies + Hibernate + AngularJs / ReactJs.