Top Banner
9 апреля 2015 года Разработка Enterprise-приложения на основе Spring Framework: собираем конструктор Вячеслав Муравлев Ведущий Java-разработчик
67

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

Jul 18, 2015

Download

Software

CUSTIS
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Разработка Enterprise-приложения на основе Spring Framework

9 апреля 2015 года

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

на основе Spring Framework:

собираем конструктор

Вячеслав Муравлев

Ведущий Java-разработчик

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

Про компанию CUSTIS

2/67

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

Наша компания занимается:

проектированием,

3/67

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

Наша компания занимается:

…разработкой,

4/67

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

Наша компания занимается:

…внедрением,

5/67

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

Наша компания занимается:

…сопровождением,

6/67

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

Наша компания занимается:

…развитием

7/67

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

Наша компания занимается:

проектированием, разработкой, внедрением,

сопровождением, развитием…

…заказных информационных систем

на полном жизненном цикле

t8/67

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

Для

БанковТорговых сетей

Госкорпораций Предприятий ЖКХ

9/67

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

Структура компании

>200

10/67

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

Профессиональная инфраструктура

11/67

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

Отличники

12/67

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

Мальчики и девочки

13/67

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

О себе

Окончил ВМК МГУ в 2000 году

8 лет работал в inhouse-разработке

крупного банка (Java)

В CUSTIS пришел в 2012 году:

ведущий Java-гитарист разработчик

14/67

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

План семинара

Поговорим немного о Spring

Сделаем небольшой гешефт

по онлайн-продаже книг

Посмотрим на возможности Spring

из коробки для решения типовых задач

15/67

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

Pro Spring

16/67

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

Почему Spring?

Богатая история (более 11 лет)

Традиция

На фоне J2EE выглядел просто отпадно!

Много идей было перенесено в JEE (ver. >= 5)

Мощный, много возможностей (фактически,

альтернатива JEE)

Основан на правильных идеях (IoC)

Хорошая инструментальная поддержка (в IDE)

Широкое сообщество, много литературы

и материалов

Изящный

17/67

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

Краткое введение в Spring

Основной принцип – Inversion of Control (IoC)

Альтернативное название – Dependency Injection

Компоненты приложения:

Java Bean

Доступны только через интерфейсы

Spring выступает как контейнер

для компонентов

Предоставляет возможности для гибкой

настройки компонентов и их взаимосвязей

18/67

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

Как Spring собирает компоненты

19/67

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

Конфигурация компонентов

и взаимосвязей: DAO-компоненты

20/67

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

Конфигурация компонентов

и взаимосвязей: сервис с бизнес-логикой

21/67

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

Использование контекста приложения

22/67

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

Spring – это не только ценный мех

в виде DI-контейнера

…но и богатый набор инструментов

для работы практически со всеми аспектами жизни

Enterprise-приложения:

работа с данными (JDBC, JPA)

поддержка создания веб-приложений

работа с транзакциями

асинхронное взаимодействие

авторизация и аутентификация

batch и scheduling

aspect-oriented programming

23/67

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

Поехали!!

24/67

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

Магазин ACME Bookstore

Трехзвенное приложение:

СУБД PostgreSQL

Веб-сервер (возьмем Jetty)

Веб-клиент

Выбор книг из списка и оформление заказа

Административная часть:

Просмотр статистики

Загрузка списка книг

25/67

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

Инфраструктура проекта

Используем Maven3

IntelliJ IDEA 14 Ultimate

PostgreSQL 9.4

БД подготовлена заранее

Jetty 9.2.7

26/67

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

1. Закладываем основу

приложения со Spring Data

27/67

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

Создаем проект

Создаем сам проект в IDEA

Прописываем зависимости от Spring

Устанавливаем уровень языка 1.7

28/67

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

Создаем новый модуль

Для создания сущностей и основных

интерфейсов создадим модуль

bookstore-domain

Подключим Hibernate и Spring ORM

Настроим контекст Spring

Напишем тест

Настроим подключение к СУБД

Настроим JPA mapping

29/67

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

А теперь немного уличной магии

30/67

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

Шаблон «Репозиторий»

Экранирует бизнес-логику от технологии

работы с данными

Ограничивает и структурирует доступ

к данным

31/67

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

Используем волшебство Spring Data

Подключаем Spring Data

Создаем интерфейс репозитория и тест

Подключаем поддержку транзакций

Создаем custom-метод на основе запроса к БД

32/67

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

Наращиваем «мясо» –

создаем бизнес-логику

Создаем интерфейс бизнес-сервиса

и реализацию

Пишем тест

Подключаем в реализацию репозитории

из Spring Сontext

Подключаем реализацию как Spring Bean

33/67

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

2. Spring Batch:

наполни БД данными

34/67

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

«Мы это будем загружать из…»

В «кровавом» Enterprise никто не хочет

вести справочники вручную

Справочники грузят:

из СУБД других систем

файлов разнообразных форматов

очередей сообщений…

Возникают типовые задачи:

загрузка обновлений

журналирование работы

распараллеливание…

35/67

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

Spring batch macht frei

Разработан совместно с Accenture

Инфраструктура для запуска

и мониторинга пакетных задач

Сведение к минимуму boilerplate-кода

От разработчика нужна только логика

чтения, трансформации и записи данных

36/67

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

Spring Batch в картинках: архитектура

37/67

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

Spring Batch в картинках: Doing Job

38/67

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

Spring Batch в картинках: Step by Step

39/67

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

Положим немного книг на наши полки

В смысле напишем загрузку списка книг в БД

40/67

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

Загрузка списка книг

Список находится в файле CSV

Подключаем Spring Batch

Создаем компоненты для чтения и записи

Настраиваем инфраструктуру и job

Запускаем и загружаем список книг

41/67

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

Перерыв

42/67

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

3. Создаем веб-интерфейс

на Spring MVC

43/67

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

Spring MVC в одной картинке

44/67

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

Структура контекстов веб-приложения

45/67

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

Собираем нашу витрину

46/67

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

Подключаем Spring MVC

Создаем новый модуль bookstore-web

Подключаем Spring MVC зависимости

Настраиваем DispatcherServlet

для приложения

Для красоты приправим Twitter Boostrap

И запустим все это на Jetty

47/67

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

Отображаем список книг

Создаем контроллер

Реализуем логику загрузки книг

(с фильтром по жанру)

Создаем JSP-страницу со списком

Настраиваем ViewResolver

48/67

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

Формируем корзину с книгами

Создаем компонент для корзины

Добавляем в контроллер метод

для внесения книги в корзину

Создаем метод для отображения корзины

Создаем страницу для отображения

корзины

49/67

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

Оформляем заказ на книги

Подключаем к контроллеру сервис заказов

Реализуем логику формирования заказа

Реализуем логику загрузки всех заказов

Создаем страницу со списком заказов

50/67

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

4. Spring Scheduling:

работаем по расписанию

51/67

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

Spring Scheduling & Task Execution

Может использовать стандартные JDK Timers

и Quartz Scheduler

Гибкая настройка политики выполнения задач:

асинхронное

синхронное

с пулом thread’ов…

Запуск задач:

по расписанию (cron и периодически)

по триггерам

52/67

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

Настроим расписание

53/67

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

Мониторинг заказов

Будем собирать общую статистику

по заказам

Сборка статистики будет происходить

по расписанию

Просмотр статистики через веб-интерфейс

54/67

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

Сбор статистики

Создаем DashboardService

Используем JdbcTemplate

для сбора и обновления статистики

Создаем в веб-приложении

DashboardController с вызовом сервиса

Создаем страницу для просмотра

статистики

55/67

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

5. Spring AOP: проявляем гибкость

56/67

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

Spring AOP

Pure Java, runtime weaving

Аспекты настраиваются как обычные

Spring beans

По умолчанию используются JDK Proxies

(только интерфейсы)

Можно подключить CGLIB proxies

для классов

Поддержка транзакций в Spring

реализована с помощью AOP

57/67

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

Создадим аспект профилирования

Будем измерять время выполнения

метода

Подключим аспект к сбору статистики

Подключаем AOP-зависимости

Создаем ProfileDashboardActionsAspect

Настраиваем аспект в контексте domain-

context

58/67

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

6. Spring Security:

включаем безопасность

59/67

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

Почему Spring Security

Независимость от конкретного контейнера

Большой выбор протоколов аутентификации

Гибкий механизм авторизации

Типовые решения из коробки

60/67

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

Защитим лес от пожара веб-приложение

61/67

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

Подключаем Spring Security

Добавляем зависимости spring-security

В domain-context настраиваем

authentication-manager

Создаем новую сущность User

и репозиторий для нее

62/67

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

Дорабатываем веб-приложение

Cоздаем отдельный контекст

Настраиваем две политики:

зарегистрированные пользователи

администраторы системы

Настраиваем web.xml

Создаем страницу входа в систему

Создаем новый AdministrationController

Реализуем логику входа

Доработаем PurchaseController

для отображения текущего пользователя63/67

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

Дорабатываем бизнес-сервис

Дорабатываем формирование заказа –

используем текущего пользователя

Дорабатываем отображение заказа –

фильтруем по текущему пользователю

64/67

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

Резюме

Spring Framework – это отличное средство

для избавления от boilerplate-кода

Он содержит в себе решения

для повседневных задач разработчика

Enterprise-приложений

Решения очень гибко настраиваются

Прежде чем писать свой инструментарий –

внимательно смотрим в Spring!!!

65/67

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

Что почитать

Сайт Spring Framework

“Pro Spring” Clarence Ho, Bob Harrop

“Spring Recipes” Gary Mak, Josh Long,

and Daniel Rubio (сборник how-to)

Stackoverflow.com – вопросы и ответы

66/67

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

Спасибо!

Вопросы?

Вячеслав Муравлев

[email protected]

67/67