В чем разница между EJB, hibernate, spring и JSF?

Я очень запутался с различными фреймворками Java. Я хочу создать проект java-сервера, чтобы предложить какой-нибудь веб-сервис Restful, но я действительно не знаю, какую структуру мне выбрать. В чем разница между JSF, EJB, Hibernate и Spring? Пожалуйста, помогите мне понять их больше.


person user261002    schedule 25.11.2010    source источник
comment
@MichaelLaffargue В зависимости от того, где вы едите, между гамбургером и лошадью может быть не такая большая разница, как вы думаете.   -  person Jason C    schedule 25.02.2014
comment
@JasonC Ты прав;)   -  person Michael Laffargue    schedule 25.02.2014


Ответы (4)


Это фреймворки для разных слоев.

  • JSF предназначен для уровня представления (веб-уровня), это компонентно-ориентированная структура (каждая часть страницы является компонентом, у нее есть состояние), такая как Wicket или Tapestry, и в отличие от сред действий, таких как Spring MVC, Struts или полосы

    Книги: Основные версии JavaServer Faces (3-е издание)
    Учебные материалы: CoreServlets.com

  • EJB 3.x — это контейнер, являющийся частью стека JavaEE. Он делает такие вещи, как внедрение зависимостей и управление жизненным циклом компонента. Обычно вам нужен полноценный сервер приложений JavaEE для EJB3.

    Учебные пособия: Учебное пособие по JavaEE 6: EJB
    Книги: EJB 3 в действии

  • Spring также является контейнером, но Spring может работать в любом коде Java (простой основной класс, апплет, веб-приложение или корпоративное приложение JavaEE). Spring может делать почти все, что может делать EJB, и многое другое, но я бы сказал, что он наиболее известен внедрением зависимостей и ненавязчивым управлением транзакциями.

    Онлайн-справочник (отлично)
    Книги: Я не смог найти хорошую англоязычную книгу по Spring 3.x, хотя несколько находятся в процессе разработки.

  • Hibernate был первым большим ORM (объектно-реляционным картографом) на платформы Java и, как таковой, вдохновил JPA (который является частью стандарта EJB3, но может использоваться без контейнера EJB). Я бы предложил кодировать против JPA и использовать только спящий режим в качестве провайдера, таким образом вы можете легко переключиться на EclipseLink и т. д.

    Книги: Pro JPA 2: Mastering the Java™ Persistence API (не для спящего режима),
    Java Persistence with Hibernate (немного устарел)

person Sean Patrick Floyd    schedule 26.11.2010
comment
Чтобы заявить явно, Spring просто нужна JVM, тогда как EJB нужен полный сервер приложений. - person boardtc; 23.02.2012
comment
@boardtc Spring нужен хотя бы контейнер для сервлетов, не так ли? Насколько мне известно, Spring использует встроенный экземпляр Tomcat. - person Utku; 28.04.2017
comment
@Utku Spring MVC делает, но Spring - это гораздо больше, чем просто среда MVC. - person Sean Patrick Floyd; 28.04.2017

  • JSF: структура графического интерфейса — вам это не нужно, если вы хотите реализовать только бэкэнд
  • EJB: стандарт для распределенных компонентов, раньше был ужасно сложным, но версия 3 стандарта довольно проста в использовании. Это может быть частью вашего решения.
  • Hibernate: структура объектно-реляционного сопоставления. Он послужил источником вдохновения для стандарта JPA (Java Persistence Architecture), который теперь поддерживается как Hibernate, так и EJB.
  • Spring: платформа приложений, которая делает все, что угодно, в том числе внедрение зависимостей, веб-интерфейсы и АОП.

Однако, если вы хотите использовать REST, наиболее важным для вас стандартом является JAX-RS. Вы можете использовать его либо в среде Spring, либо с EJB. Для сохранения вы можете использовать Hibernate или реализацию JPA контейнера EJB, такого как Glassfish.

person Michael Borgwardt    schedule 25.11.2010

EJB — это Enterprise Java Bean -- см. ссылку для описания, но в основном это java по умолчанию. способ написания корпоративного приложения.

Hibernate — это ORM Framework; способ сопоставления объектов/классов в вашем приложении с таблицами базы данных. Это связано с тем, как вы сохраняете свои данные в базе данных.

Spring — это контейнер IoC/Dependency Injection, который предоставляет множество полезных и хорошо протестированных абстракций, облегчающих вашу жизнь. Spring — это что-то вроде собственного фреймворка для приложений.

JSF — это Java Server Faces, технология просмотра веб-приложений Java.

Вы бы использовали EJB ИЛИ Spring. Вы можете использовать Hibernate в качестве реализации постоянства, если хотите, с любым из них; вам не нужно этого делать. Для веб-сервисов RESTFul вам действительно не нужен JSF.

Люди очень довольны Spring - я рекомендую использовать его...

person hvgotcodes    schedule 25.11.2010

  • JSF — Java Server Faces -> Веб-интерфейс пользователя
  • EJB - Enterprise Java Beans -> Компоненты с состоянием (ориентированные на сеанс) или без состояния (сервисы), управляемые сообщениями (асинхронные)
  • Hibernate — служба сохранения, как и другие реализации JPA (Eclipselink, OpenJPA или Toplink).
  • Spring — это другой мир без EJB, который может интегрировать другие технологии просмотра. Это довольно гибко.

Придется выбирать между JEE5/6 и пружиной. Возьмите красную или синюю таблетку, не используйте обе.

person stacker    schedule 25.11.2010
comment
Хороший обзор. Но насчет красных и синих таблеток: Spring прекрасно интегрируется практически с любой другой технологией, включая EJB static.springsource.org/spring/docs/3.0.x/ - person Sean Patrick Floyd; 26.11.2010