Подтвердить что ты не робот

Java EE 6 и альтернативы

Я разработчик Java SE, но у меня есть богатый веб-фон (PHP, Perl/CGI и т.д.), и теперь я начинаю новый проект. Он будет иметь веб-интерфейс, бизнес-логику спагетти, реляционную базу данных в качестве хранилища и подключения к другим службам. Я делаю это с нуля.

Мои коллеги сказали мне использовать spring, spring безопасность и распорки. Я кратко расскажу о спецификации Java EE 6 и обнаружил, что он охватывает практически все аспекты корпоративного приложения. Я спросил своих коллег, зачем им нужны spring и struts, но похоже, что они используют технологии просто потому, что они знакомы с ними и не знакомы с классическим стеклом Java EE 6.

Итак, мой вопрос: что плохого в Java EE 6? Зачем мне нужен spring, если есть JNDI-запросы? Потребуется день или два, чтобы создать поддельный InitialContext для модульных тестов. И это все: я стою с внешними инструментами вроде spring. Зачем мне нужна spring -security, если есть защита, встроенная в спецификацию Servlets? Я могу отобразить любой запрос на любой сервлет с помощью web.xml, не требуется struts.xml. Я могу использовать сервлет-фильтры вместо перехватчиков struts. Есть RMI, поэтому мне не нужен spring -remote. И так далее.

Почему я должен беспокоить себя со всем этим причудливым материалом, если есть Java EE 6?

Я действительно хочу найти ситуацию, когда Java EE 6 недостаточно. У вас есть?

Спасибо!

4b9b3361

Ответ 1

Почему люди используют Spring и почему он так популярен, требует небольшой истории.

Раньше было, что Spring был проще, чем приложения Java EE. Я имею в виду спецификацию EJB2.x. Я понял, что существует какой-то бунт против сложного характера этой спецификации. Разработчики хотели получить более простую архитектуру, а Spring предоставили для них, разрешив им писать POJO (простые старые объекты Java) вместо классов, которым пришлось реализовать определенные интерфейсы для получения желаемой функциональности.

Spring также сделал 2 принципа более популярными: инверсия управления (IoC) и инъекция зависимостей. В сочетании эти два принципа предоставили другой способ подключения различных компонентов приложения и использования этих компонентов в приложении при его запуске. Это, в сочетании с идеей просто писать POJO, было очень убедительным для многих людей, потому что код был проще, и было проще подключить все ваши компоненты.

Новая спецификация EJB3 аннулирует некоторые из предложений Spring, но Spring намного больше, чем контейнер IoC. Он предоставляет отличные шаблоны для доступа JDBC к базе данных, несколько простых способов обработки транзакций, утилиты тестирования, стек MVC и т.д. Он был популярен и остается популярным. Одна шутка, которую я слышал,

"EJB3, ответ на вопрос никто не спросил..."

EJB3 - прекрасный выбор. Spring - прекрасный выбор. Grails также является прекрасным выбором (использует Spring, Hibernate под обложками).

Ответ 2

Spring не требуется Java EE. Spring просто упрощает использование сложных компонентов Java EE.

Ответ 3

"Итак, зачем мне spring?"

Илья! Наконец, вы убедили меня (и, надеюсь, вы сами), что вам не нужен Spring. На самом деле во всей этой куче нет ничего особенного, если только вы к этому не привыкли. Они пишут книгу о веб-технологиях, затем добавляют в нее остальную компьютерную науку и называют это RESTfull.

"Однако представьте, что у вас много кода, который обрабатывает ввод формы и множество моделей. Каждый контроллер может иметь представление".

Амир! - Очень хорошее соображение. Реальная разница между веб-фреймворками, которые я знаю, заключается в том, что такое определение компонента. Struts имеет три типа компонентов - компоненты View, Controler и Model. На первый взгляд выглядит хорошо (лучше, чем некоторые другие наверняка). Но что вы можете построить из этих компонентов? - Просмотр одной страницы, один контроллер страницы и одна страница. Бог знает, какова будет стоимость привязки предметов из этих трех рядов компонентов - возможно, огромная конфигурация, если это вообще возможно.

Реальное решение (как вы уже говорили в приведенном выше) представляет собой концепцию компонентов, каждая из которых имеет свое представление, ее контроллер и его модель. До сих пор осталось только одна инфраструктура - HybridJava. Что такое блок веб-страницы в spring?

Ответ 4

Похоже, что вам нужны специальные возможности POC с Spring, а затем с Java EE 6, чтобы вы могли сравнить их как с реальным рабочим практическим прототипом.

Причины, по которым я использую Spring, следующие:

  • способность абстрагировать мое приложение от сервера приложений. Таким образом, я могу запускаться на любом сервере приложений или вне AS для модульного тестирования.
  • много кода плиты котла, которое я должен был бы написать, чтобы улучшить мой дизайн уже доступен
  • IOC/DI - объект, который нуждается в зависимостях, не знает о том, как их получить, - все, что он знает, - это то, что ему нужно. Некоторые третьи лица предоставляют их. Да, вы можете перевернуть свою собственную версию этой третьей стороны в Java EE 6, но она уже доступна в Spring.
  • Bean Управляемые транзакции - Spring предоставляет все инструменты, необходимые для полного контроля низкого уровня транзакций. Я всегда предлагаю использовать BMT, поскольку он дает вам гибкость, которая вам может понадобиться.

Ответ 5

Spring модель-view-контроллер, который делает Java EE более чистым и более организованным. Структурно более корректно разделять ваши модели, представления и контроллер.

Я согласен с тобой. Если это простой веб-сайт, я думаю, вы можете делать все с помощью Java EE. Однако представьте, что у вас много кода, который обрабатывает ввод формы и множество моделей. Каждый контроллер может иметь представление. Вы можете создать сервлет, а затем перенаправить на нужную страницу jsp или использовать spring, потому что он уже все это делает.

Решение заключается в том, сколько вам нужно использовать spring. Хорошая структура - это та, которая позволяет вам выбирать, какие части использовать. Я думаю, что spring делает это хорошо, потому что вы можете просто использовать модель mvc или пойти дальше и сделать больше с ней.

Последняя вещь, spring имеет инъекцию зависимостей, которая упрощает настройку.