Какова ваша «лучшая практика» для первого проекта Java EE Spring? [закрыто]

В настоящее время я пытаюсь войти в разработку Java EE с помощью среды Spring. Поскольку я новичок в Spring, трудно представить, как должен начинаться хорошо работающий проект.

Есть ли у вас лучшие практики , советы или основные НЕ для начинающих? Как вы начали с Spring - большой проект или небольшие учебные приложения? Какую технологию вы использовали сразу: АОП, сложный Hibernate ...

12.08.2008 07:36:14
Должно ли это быть одновременно? Если вы новичок в обоих случаях, вам будет проще работать с ними по одному (неясно, является ли Java EE для вас новым).
SteveD 24.08.2009 20:57:52
11 ОТВЕТОВ
РЕШЕНИЕ

Небольшой совет - я считаю полезным модулировать и четко маркировать мои контекстные XML-файлы Spring на основе проблем приложения. Вот пример веб-приложения, над которым я работал:

  • MyProject / src / main / resources / spring /
    • datasource.xml - Мой единственный компонент источника данных.
    • persistence.xml - Мои DAO / Репозитории. Зависит отdatasource.xmlбобов.
    • services.xml - реализации сервисного уровня. Обычно это бобы, к которым я применяю транзакционность с использованием AOP. Зависит отpersistence.xmlбобов.
    • controllers.xml - контроллеры My Spring MVC. Зависит отservices.xmlбобов.
    • views.xml - Мои реализации представлений.

Этот список не является ни идеальным, ни исчерпывающим, но я надеюсь, что он иллюстрирует это. Выберите любую стратегию именования, и гранулярность подойдет вам лучше всего.

Из моего (ограниченного) опыта я видел, что этот подход дает следующие преимущества:

Более четкая архитектура

Четко названные контекстные файлы дают тем, кто не знаком с вашей структурой проекта, разумное место для начала поиска определений бина. Может сделать обнаружение циклических / нежелательных зависимостей немного проще.

Помогает в дизайне домена

Если вы хотите добавить определение bean-компонента, но оно не вписывается ни в один из ваших контекстных файлов, возможно, появляется новая концепция или проблема? Примеры:

  • Предположим, вы хотите сделать свой уровень обслуживания транзакционным с AOP. Вы добавляете эти определения бинов services.xmlили помещаете их в свои собственные transactionPolicy.xml? Обсудите это с вашей командой. Должна ли ваша политика транзакций быть подключаемой?
  • Добавить компоненты Acegi / Spring Security в свой controllers.xmlфайл или создать security.xmlфайл контекста? У вас есть разные требования безопасности для разных развертываний / сред?

Интеграционное тестирование

Вы можете подключить подмножество своего приложения для интеграционного тестирования (например, учитывая приведенные выше файлы, для тестирования базы данных, которую вам нужно только создать datasource.xmlи persistence.xmlbean-компоненты).

В частности, вы можете аннотировать класс интеграционного теста следующим образом:

@ContextConfiguration(locations = { "/spring/datasource.xml" , "/spring/persistence.xml" })

Хорошо работает с графическим компонентом Spring IDE

Наличие большого количества сфокусированных и хорошо названных контекстных файлов позволяет легко создавать собственные BeansConfigSets для визуализации слоев вашего приложения с помощью Beans Graph в Spring IDE . Я использовал это раньше, чтобы дать новым членам команды общий обзор организации нашего приложения.

26
16.08.2008 21:12:19

Хотя прошло уже много лет с тех пор, как я использовал Spring, и я не могу сказать, что я его фанат, но я знаю, что инструмент App Fuse ( https://java.net/projects/appfuse/ ) был полезен, чтобы помочь людям начальная загрузка с точки зрения генерации всех артефактов, необходимых для начала работы.

2
26.11.2013 03:58:58

Сосредоточиться в первую очередь на сердце весны: инъекция зависимости. Как только вы увидите все способы использования DI, начните думать о более интересных элементах, таких как AOP, Remoting, JDBC Templates и т. Д. Поэтому мой лучший совет - пусть использование Spring будет развиваться из ядра.

Лучшая практика? Если вы используете стандартную конфигурацию XML, управляйте размером отдельных файлов и продуманно их комментируйте. Вы можете подумать, что вы и другие прекрасно поймете ваши определения bean-компонентов, но на практике к ним несколько сложнее вернуться, чем к простому старому Java-коду.

Удачи!

14
12.08.2008 07:43:24

Мне на самом деле очень понравилась весна .. Это был свежий ветерок в среднем J2EE Java Beans ..

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

http://static.springframework.org/docs/Spring-MVC-step-by-step/

Кроме того, я решил сделать все возможное и добавил Hibernate в свое приложение Spring;), потому что Spring обеспечивает отличную поддержку Hibernate ... :)

У меня, однако, нет, что я усвоил трудным путем (продукт в производстве) ... Если вы реализуете только интерфейс Controller и возвращаете объект ModelAndView с некоторыми данными, предоставленными интерфейсом, Spring собирает их с помощью garbadge. ресурсы, для пытается кэшировать эти данные. Поэтому будьте осторожны, помещая большие данные в эти объекты ModelAndView, поскольку они будут загружать память вашего сервера до тех пор, пока сервер находится в эфире, как только эта страница будет просмотрена ...

3
12.08.2008 07:54:25
Хорошая книга в гиперссылке
Anirudh 26.11.2013 08:11:29

Хороший способ начать - сосредоточиться на «Springframework». Портфель Spring вырос до огромного количества проектов по различным аспектам корпоративного программного обеспечения. Придерживайтесь ядра в начале и попытайтесь понять концепции. Загрузите последние двоичные файлы и ознакомьтесь с примером Spring's petclinic, как только вы ознакомитесь с ядром. Он дает довольно хороший обзор различных проектов, предлагаемых SpringSource.

Хотя документация очень хорошая, я бы порекомендовал книгу после того, как вы поймете основы. То, что я нашел проблематичным с документацией, - то, что это не всесторонне и не может дать Вам все детали, в которых Вы нуждаетесь.

2
12.08.2008 09:31:41

Spring также очень много о модульном тестировании и, следовательно, о тестируемости ваших классов. В основном это означает думать о модульности, разделении интересов, ссылках на класс через интерфейсы и т. Д.

1
12.08.2008 10:00:45

Если вы просто хотите немного поболтать и посмотреть, нравится ли вам это, я рекомендую начать со слоя DAO, используя поддержку Spring JDBC и / или Hibernate. Это познакомит вас со многими основными понятиями, но сделает это так, чтобы его было легко изолировать от остальной части вашего приложения. Это маршрут, по которому я следовал, и он хорошо прогрелся, прежде чем приступить к созданию полноценного приложения с помощью Spring.

1
12.08.2008 15:28:59

Начните здесь - я думаю, что это одна из лучших книг по программному обеспечению, которые я читал.
Эксперт Spring MVC и веб-поток

Изучите новую конфигурацию на основе аннотаций для классов MVC. Это часть весны 2.5. Использование классов на основе аннотаций значительно упростит написание модульных тестов. Также хорошая возможность сократить количество XML.

О, да, юнит-тесты - если вы используете Spring, вы ЛУЧШЕ будете юнит-тестирование. :) Напишите модульные тесты для всех ваших классов Web и Service Layer.

Читайте о домене, управляемом дизайном. Тот факт, что вы можете использовать классы Domain Object на всех уровнях Spring-приложения, означает, что у вас будет ОЧЕНЬ мощная модель домена. Используйте это.

Тем не менее, при использовании ваших классов объектов домена для заполнения формы вы захотите учесть недавние проблемы безопасности, связанные с Spring Framework. Обсуждение на стороне сервера раскрывает способ закрыть дыру в комментариях.

3
12.08.2008 23:49:30

«... Какую технологию вы использовали сразу: АОП, сложный Hibernate ...» - я бы сказал, что лучше спросить, что люди не использовали сразу. Я бы добавил примеры, которые вы приводите в этот список.

Spring MVC и шаблон JDBC будут моими начальными рекомендациями. Вы можете пройти очень длинный путь только с этими.

Я бы порекомендовал следовать архитектурным рекомендациям Spring. Используйте их многоуровневые идеи. Убедитесь, что ваш веб-слой полностью отделяется от остальных. Вы делаете это, позволяя веб-уровню взаимодействовать с серверной частью только через уровень сервиса.

Если вы хотите повторно использовать этот сервисный уровень, хорошей рекомендацией является предоставление его с помощью веб-сервисов Spring "contract first". Если вы начнете с сообщений XML, которые вы передаете туда и обратно, ваш клиент и сервер могут быть полностью отделены.

IDE с лучшей поддержкой Spring - IntelliJ. Стоит потратить несколько баксов.

2
23.08.2009 11:15:09

С выпуском Spring 2.5 и 3.0, я думаю, что одним из наиболее важных передовых методов, которыми можно воспользоваться сейчас, являются аннотации Spring. Аннотации для контроллеров, сервисов и репозиториев могут сэкономить массу времени, позволить вам сосредоточиться на бизнес-логике вашего приложения и потенциально могут сделать все ваши объекты обычными старыми объектами Java (POJO).

1
8.05.2010 03:13:43

Прежде всего, Spring посвящен модульности и работает лучше всего, если сосредоточиться на написании небольших компонентов, которые делают одно и делают это хорошо.

Если вы следуете передовой практике в целом, как:

  • Определение интерфейса, а не абстрактных классов
  • Делать типы неизменяемыми
  • Сохраняйте зависимости как можно меньше для одного класса.
  • Каждый класс должен делать одну вещь и делать это хорошо. Большие монолитные классы отстойные, их сложно тестировать и использовать.

Если ваши компоненты маленькие и следуют указанным выше догмам, их легко подключить и поиграть с другими вещами. Вышеуказанные пункты, естественно, верны и для самой среды Spring.

PS

Не слушайте вышеприведенные пункты, они говорят о том, как сделать что-либо. Важно научиться думать, а не делать что-то. Люди могут думать, повторять что-то не умно, мышление есть.

4
8.05.2010 03:22:51