2011-01-15 4 views
12

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

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

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

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

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

Спасибо!

+3

Существует довольно большая разница между винтажным J2EE и современной Java EE 6. О чем ты говоришь? Затем Spring и Struts были отличными дополнениями поверх J2EE. Но теперь Java EE 6 обеспечивает почти то же самое уже вне коробки. Ваши коллеги, возможно, все еще висят в древние времена. – BalusC

+0

Извините) Java EE 6. Я не буду использовать Java 1.2))) –

+0

Пожалуйста, пересмотреть/повторить свой вопрос. Вы могли бы также пересмотреть это :) Аналогичный вопрос [здесь] (http://stackoverflow.com/questions/2084169/choosing-a-java-web-framework-now) и [здесь] (http://stackoverflow.com/вопросы/1960280/что в освоении, для решений на Java-веб-приложения-в-Java-е-е-6). – BalusC

ответ

1

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

+0

Я это знаю) Но я могу использовать JNDI вместо Spring DI. Итак, зачем мне весна? –

+2

JNDI ничем не отличается от Spring DI. CDI есть. – BalusC

0

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

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

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

Конечная вещь, пружина имеет инъекцию зависимости, которая упрощает настройку.

+0

Спасибо. Я могу реализовать шаблон MVC самостоятельно: каждый сервлет - это контроллер, а страница JSP - это просто представление. Я бы не использовал логику внутри JSP (потому что это невозможно проверить). Я могу использовать JNDI (поиск услуг) без весны. Это так же хорошо, как инъекция зависимости, не так ли? –

+0

Я думаю, вы пытаетесь изобрести колесо. Это круто, но почему бы вам это сделать, когда Spring уже проверена миллионами пользователей. Если вы скажете об обучении, то я полностью с вами. В противном случае вы не просто используете его libs, которые были созданы и протестированы. –

+0

В хорошем дизайне MVC у вас будет только один сервлет. – BalusC

13

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

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

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

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

«EJB3, ответ на вопрос NoOne спросил ...»

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

+1

Я большой поклонник Grails! Удивительно, как быстро вы можете встать и бежать. –

+0

@amir, я полностью согласен. – hvgotcodes

+1

, а я нет. Grails неплохо, но с той версией, которую мы используем - 1.3.3, все еще довольно неустойчиво. Мы должны были исправить несколько ошибок сами (после их сообщения, конечно). И они не были чем-то вроде ошибок в корне. – Bozho

1

«Итак, зачем мне весна?»

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

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

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

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

1

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

Причины я использую весной, однако, является:

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