Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Разработка Enterprise-приложения на основе Spring Framework

CUSTIS
April 09, 2015

Разработка Enterprise-приложения на основе Spring Framework

Открытый семинар для студентов в компании CUSTIS (9 апреля 2015 года).
Лектор: Вячеслав Муравлев, ведущий Java-разработчик.

CUSTIS

April 09, 2015
Tweet

More Decks by CUSTIS

Other Decks in Programming

Transcript

  1. 9 апреля 2015 года Разработка Enterprise-приложения на основе Spring Framework:

    собираем конструктор Вячеслав Муравлев Ведущий Java-разработчик
  2. О себе  Окончил ВМК МГУ в 2000 году 

    8 лет работал в inhouse-разработке крупного банка (Java)  В CUSTIS пришел в 2012 году: ведущий Java-гитарист разработчик 14/67
  3. План семинара  Поговорим немного о Spring  Сделаем небольшой

    гешефт по онлайн-продаже книг  Посмотрим на возможности Spring из коробки для решения типовых задач 15/67
  4. Почему Spring?  Богатая история (более 11 лет)  Традиция

     На фоне J2EE выглядел просто отпадно!  Много идей было перенесено в JEE (ver. >= 5)  Мощный, много возможностей (фактически, альтернатива JEE)  Основан на правильных идеях (IoC)  Хорошая инструментальная поддержка (в IDE)  Широкое сообщество, много литературы и материалов  Изящный  17/67
  5. Краткое введение в Spring  Основной принцип – Inversion of

    Control (IoC)  Альтернативное название – Dependency Injection  Компоненты приложения:  Java Bean  Доступны только через интерфейсы  Spring выступает как контейнер для компонентов  Предоставляет возможности для гибкой настройки компонентов и их взаимосвязей 18/67
  6. Spring – это не только ценный мех в виде DI-контейнера

    …но и богатый набор инструментов для работы практически со всеми аспектами жизни Enterprise-приложения:  работа с данными (JDBC, JPA)  поддержка создания веб-приложений  работа с транзакциями  асинхронное взаимодействие  авторизация и аутентификация  batch и scheduling  aspect-oriented programming 23/67
  7. Магазин ACME Bookstore  Трехзвенное приложение:  СУБД PostgreSQL 

    Веб-сервер (возьмем Jetty)  Веб-клиент  Выбор книг из списка и оформление заказа  Административная часть:  Просмотр статистики  Загрузка списка книг 25/67
  8. Инфраструктура проекта  Используем Maven3  IntelliJ IDEA 14 Ultimate

     PostgreSQL 9.4  БД подготовлена заранее  Jetty 9.2.7 26/67
  9. Создаем проект  Создаем сам проект в IDEA  Прописываем

    зависимости от Spring  Устанавливаем уровень языка 1.7 28/67
  10. Создаем новый модуль  Для создания сущностей и основных интерфейсов

    создадим модуль bookstore-domain  Подключим Hibernate и Spring ORM  Настроим контекст Spring  Напишем тест  Настроим подключение к СУБД  Настроим JPA mapping 29/67
  11. Используем волшебство Spring Data  Подключаем Spring Data  Создаем

    интерфейс репозитория и тест  Подключаем поддержку транзакций  Создаем custom-метод на основе запроса к БД 32/67
  12. Наращиваем «мясо» – создаем бизнес-логику  Создаем интерфейс бизнес-сервиса и

    реализацию  Пишем тест  Подключаем в реализацию репозитории из Spring Сontext  Подключаем реализацию как Spring Bean 33/67
  13. «Мы это будем загружать из…»  В «кровавом» Enterprise никто

    не хочет вести справочники вручную  Справочники грузят:  из СУБД других систем  файлов разнообразных форматов  очередей сообщений…  Возникают типовые задачи:  загрузка обновлений  журналирование работы  распараллеливание… 35/67
  14. Spring batch macht frei  Разработан совместно с Accenture 

    Инфраструктура для запуска и мониторинга пакетных задач  Сведение к минимуму boilerplate-кода  От разработчика нужна только логика чтения, трансформации и записи данных 36/67
  15. Загрузка списка книг  Список находится в файле CSV 

    Подключаем Spring Batch  Создаем компоненты для чтения и записи  Настраиваем инфраструктуру и job  Запускаем и загружаем список книг 41/67
  16. Подключаем Spring MVC  Создаем новый модуль bookstore-web  Подключаем

    Spring MVC зависимости  Настраиваем DispatcherServlet для приложения  Для красоты приправим Twitter Boostrap  И запустим все это на Jetty 47/67
  17. Отображаем список книг  Создаем контроллер  Реализуем логику загрузки

    книг (с фильтром по жанру)  Создаем JSP-страницу со списком  Настраиваем ViewResolver 48/67
  18. Формируем корзину с книгами  Создаем компонент для корзины 

    Добавляем в контроллер метод для внесения книги в корзину  Создаем метод для отображения корзины  Создаем страницу для отображения корзины 49/67
  19. Оформляем заказ на книги  Подключаем к контроллеру сервис заказов

     Реализуем логику формирования заказа  Реализуем логику загрузки всех заказов  Создаем страницу со списком заказов 50/67
  20. Spring Scheduling & Task Execution  Может использовать стандартные JDK

    Timers и Quartz Scheduler  Гибкая настройка политики выполнения задач:  асинхронное  синхронное  с пулом thread’ов…  Запуск задач:  по расписанию (cron и периодически)  по триггерам 52/67
  21. Мониторинг заказов  Будем собирать общую статистику по заказам 

    Сборка статистики будет происходить по расписанию  Просмотр статистики через веб-интерфейс 54/67
  22. Сбор статистики  Создаем DashboardService  Используем JdbcTemplate для сбора

    и обновления статистики  Создаем в веб-приложении DashboardController с вызовом сервиса  Создаем страницу для просмотра статистики 55/67
  23. Spring AOP  Pure Java, runtime weaving  Аспекты настраиваются

    как обычные Spring beans  По умолчанию используются JDK Proxies (только интерфейсы)  Можно подключить CGLIB proxies для классов  Поддержка транзакций в Spring реализована с помощью AOP 57/67
  24. Создадим аспект профилирования  Будем измерять время выполнения метода 

    Подключим аспект к сбору статистики  Подключаем AOP-зависимости  Создаем ProfileDashboardActionsAspect  Настраиваем аспект в контексте domain- context 58/67
  25. Почему Spring Security  Независимость от конкретного контейнера  Большой

    выбор протоколов аутентификации  Гибкий механизм авторизации  Типовые решения из коробки 60/67
  26. Подключаем Spring Security  Добавляем зависимости spring-security  В domain-context

    настраиваем authentication-manager  Создаем новую сущность User и репозиторий для нее 62/67
  27. Дорабатываем веб-приложение  Cоздаем отдельный контекст  Настраиваем две политики:

     зарегистрированные пользователи  администраторы системы  Настраиваем web.xml  Создаем страницу входа в систему  Создаем новый AdministrationController  Реализуем логику входа  Доработаем PurchaseController для отображения текущего пользователя 63/67
  28. Дорабатываем бизнес-сервис  Дорабатываем формирование заказа – используем текущего пользователя

     Дорабатываем отображение заказа – фильтруем по текущему пользователю 64/67
  29. Резюме  Spring Framework – это отличное средство для избавления

    от boilerplate-кода  Он содержит в себе решения для повседневных задач разработчика Enterprise-приложений  Решения очень гибко настраиваются  Прежде чем писать свой инструментарий – внимательно смотрим в Spring!!! 65/67
  30. Что почитать  Сайт Spring Framework  “Pro Spring” Clarence

    Ho, Bob Harrop  “Spring Recipes” Gary Mak, Josh Long, and Daniel Rubio (сборник how-to)  Stackoverflow.com – вопросы и ответы 66/67