Это действительно слишком общий вопрос, тем более что существует очень много толкований самого слова framework , а в мире frameworks много разных видов для разных задач. Тем не менее, я сделаю это для Java.
Java
Java EE
Общая корпоративная среда Java по умолчанию называется Java EE. Java EE сильно подчеркивает многоуровневую архитектуру. Это довольно большая структура, и изучение каждого ее аспекта может занять некоторое время. Он поддерживает несколько типов приложений. Чрезвычайно маленькие и простые могут использовать файлы JSP только с некоторыми скриптлетами, в то время как большие могут использовать гораздо больше.
Java EE на самом деле не заставляет вас использовать все его части, но вы выбираете то, что вам нравится.
Сверху он состоит из следующих частей:
Веб-слой
Для веб-уровня Java EE в первую очередь определяет компонент и основанную на MVC веб-платформу под названием JSF
- JavaServer Faces. JSF использует язык описания представлений на основе XML (язык шаблонов), называемый Facelets. Страницы создаются путем определения шаблонов и предоставления клиентам шаблонов контента для них, включая другие лицевые стороны, и, наконец, размещения на них компонентов и общей разметки.
JSF предоставляет четко определенный жизненный стиль для выполнения всех действий, которые должно выполнять каждое веб-приложение: преобразование значений запроса, их проверка, обращение к бизнес-логике (модели) и, наконец, делегирование в представление (Facelets) для рендеринга. .
Для более подробного описания посмотрите некоторые статьи BalusC, например, Каковы основные недостатки Java Server Faces 2.0?
Бизнес уровень
Бизнес-уровень в инфраструктуре Java EE представлен облегченной структурой бизнес-компонента, называемой EJB
- Enterprise JavaBeans. Предполагается, что EJB-компоненты содержат чистую бизнес-логику приложения. Среди прочего EJB-компоненты заботятся о транзакциях, параллелизме и при необходимости удаленном взаимодействии.
Обычный класс Java становится EJB с применением аннотации @Stateless. По умолчанию каждый метод этого компонента автоматически становится транзакционным. Это означает, что если метод вызывается и никакая транзакция не активна, запускается одна, в противном случае присоединяется одна. При необходимости это поведение можно настроить или даже отключить. В большинстве случаев транзакции будут прозрачны для программиста, но при необходимости в Java EE имеется явный API для управления ими вручную. Это JTA
API - API транзакций Java.
Методы в EJB могут быть легко выполнены для асинхронного выполнения с помощью аннотации @Asynchronous.
Java EE явно поддерживает многоуровневую структуру через концепцию отдельного модуля специально для EJB. Это изолирует эти бобы и предотвращает доступ к их верхнему слою. Посмотрите это Упаковка EJB в JavaEE 6 WAR против EAR для более подробного объяснения.
Стойкость слоя
Для персистентности инфраструктура Java EE поставляется со стандартной платформой ORM под названием JPA
- Java Persistence API. Это основано на аннотировании классов Java с помощью аннотации @Entity и свойства или поля для них с помощью @Id. При желании (при необходимости) можно указать дополнительную информацию посредством аннотаций о том, как объекты и отношения объектов отображаются в реляционной базе данных.
JPA сильно выделяет стройные объекты. Это означает, что сами сущности представляют собой как можно больше POJO, которые можно легко отправить на другие уровни и даже на удаленные клиенты. Сущность в Java EE обычно не заботится о своей собственной персистентности (то есть не содержит ссылок на соединения с БД и тому подобное). Вместо этого для работы с сущностями предоставляется отдельный класс EntityManager
.
Наиболее удобный способ работы с этим EntityManager - внутри EJB-компонента, что делает получение экземпляра и обработку транзакций быстрым.Однако использование JPA на любом другом уровне, даже вне каркаса (например, в Java SE) также поддерживается.
Это наиболее важные службы, связанные с традиционными уровнями в типичном корпоративном приложении,но инфраструктура Java EE поддерживает множество дополнительных сервисов.Вот некоторые из них:
Обмен сообщениями
Обмен сообщениями напрямую поддерживается в инфраструктуре Java EE через API-интерфейс JMS
- Служба сообщений Java.Это позволяет бизнес-коду отправлять сообщения в так называемые очереди и темы.Различные части приложения или даже удаленные приложения могут прослушивать такую очередь или тему.
Компонентная структура EJB даже имеет тип компонента, специально предназначенный для обмена сообщениями;бин, управляемый сообщениями, который имеет метод onMessage
, который автоматически вызывается при поступлении нового сообщения для очереди или темы, которую слушает бин.
Рядом с JMS Java EE также предоставляет event-bus
, которая представляет собой простую легкую альтернативу полноценному обмену сообщениями.Это обеспечивается через API CDI
, который представляет собой комплексный API, который, помимо прочего, предоставляет области действия для веб-слоя и заботится о внедрении зависимостей.Будучи довольно новым API, он в настоящее время частично перекрывается с EJB и так называемыми управляемыми bean-компонентами из JSF.
Remoting
Java EE предоставляет множество возможностей для удаленного взаимодействия из коробки.EJB могут подвергаться воздействию внешнего кода, желающего и способного обмениваться данными через двоичный протокол, просто позволяя им реализовать удаленный интерфейс.
Если двоичное взаимодействие не поддерживается, Java EE также предоставляет различные реализации веб-служб.Это делается, в частности, с помощью JAX-WS (веб-сервисы, мыло) и JAX-RS (отдых).
Планирование
Для планирования периодических или синхронизированных заданий Java EE предлагает простой API таймера,Этот API поддерживает CRON-подобные таймеры, использующие естественный язык, а также таймеры для отложенного выполнения кода или последующих проверок.
Эта часть Java EE применима, но, как уже упоминалось, довольно проста.
В Java EE есть еще кое-что, но я думаю, что это касается самых важных вещей.
Spring
Альтернативной корпоративной средой для Java является Spring.Это проприетарная, хотя и полностью открытая среда разработки.
Так же, как среда Java EE, среда Spring содержит веб-среду (называемую Spring MVC), среду бизнес-компонентов (просто называемую Spring или Core Spring Framework).) и стек веб-служб (называемый Spring Web Services).
Хотя многие части инфраструктуры Java EE могут использоваться автономно, Spring уделяет больше внимания созданию собственного стека, чем Java EE.
Выбор Java EE против Spring часто подвергается религиозному влиянию.Технически обе платформы предлагают аналогичную модель программирования и сопоставимое количество функций.Java EE может показаться немного более легким (соглашение об упорядочении по сравнению с конфигурацией) и обладает преимуществами безопасных типов инъекций, в то время как Spring может предлагать больше таких небольших удобных методов, которые часто нужны разработчикам.
Кроме того, Spring предлагает более тщательно и непосредственно используемый API безопасности (называемый Spring Security), в котором Java EE оставляет множество деталей по безопасности открытым для сторонних поставщиков.