Spring: обзор фреймворка для самых маленьких

Spring Framework: краткий обзор

В данной статье мы не будем программировать или разбирать новую технологию. Сейчас я попытаюсь привести для Вас обзор самого популярного Java фреймворка: Spring.

Первое, что нужно понимать при разработке приложений: они состоят из множества слоев и зависимостей. Типичное веб приложение будет состоять из слоя доступа к базе данных, веб контроллеров, сервисов (место где идет обработка данных), юнит тестов. И это только самые простые программы. Я не упоминаю микросервисные или те, которые интегрированы с другими сторонними системами.

Так как цель данной статьи не усложнять, а сделать понятнее тему фреймворка Spring, мы не будем в деталях рассматривать сложные архитектурные системы такие как микросервисы и клауд.

Если писать программу используя только язык Java, у вас скорее всего будет много трудностей и необходимости писать так называемый «лишний» код. На примере простого веб приложения, Вы можете заметить сколько усилий нужно чтобы подключить базу данных, настроить сервлет, или отображение стилей на веб странице.

Используя Spring можно добиться тех же результатов что и на чистой Java, но гораздо меньшими усилиями и меньшим количеством кода.

Цель данного фреймворка — чтобы программист сосредоточился на решении бизнес задачи вместо того, чтобы тратить время на настройку кода.

Еще один момент который вводит в заблуждение новичков: Spring Boot. Наверняка Вы сталкивались с тем, что ищите определенный туториал по сприг веб например. А в результате Вам выдает Web со Spring Boot.

Сам по себе фреймворк состоит из модулей, которые можно подключать и настраивать тогда, когда они нужны. Spring Boot берет на себя вся работу с настройками и позволяет запускать веб приложения фактически в пару кликов. Можно сказать что это эволюция фреймворка Spring, чтобы сделать написание приложений еще проще.

Несмотря на то, что Spring Boot берет на себя всю работу по автоматической настройки приложения, он позволяет взять управление настройками на себя в случае если нужно что-то кастомизировать.

Что я имею ввиду под настройками приложения?

Возьмем например веб приложение, которое будет находить в базе данных книги и выдавать их по запросу на контроллер. Если использовать просто фреймворк Spring — нам нужно указать настройки к базе данных, веб страницам (если это например thymeleaf или jsp). Необходимо также скачать и настроить контейнер сервлетов: Tomkat или Glassfish. Написанный код нужно упаковать в веб архив war и задеплоить на Tomkat.

Что нам в таком случае предлагает Spring Boot. Все настройки по приложению можно поместить в проперти файл вместо java классов. Как правило, проперти файл — application.properties лежит в папке resources. Но и это можно поменять и вынести настройки на удаленный сервер например или в другой файл.

Спринг бут при запуске заглянет в файл зависимостей библиотек. Если это Maven то в pom.xml. Он просканирует все зависимости, которые подключены и после использует файл проперти, чтобы подставить настройки в требуемые зависимости. Возьмем для примера подключение базы данных. Сначала Вы указываете в файле pom.xml что будете использовать например spring-data-jpa. Спринг «знает», что данная библиотека основана на работе с базой данных. При запуске он будет искать в файле application.properties настройки к базе (логин, пароль, урл). Если он их не найдет — то не запустится и выдаст соответственное сообщение.

Spring Boot также включает в себя встроенный контейнер сервлетов (по умолчании Tomcat) что позволяет Вам запускать веб приложения как обычные java программы: используя jar файл. Или если еще проще говоря: просто нажимая на зеленую стрелку в IDE как Вы это делали с Hello world приложениями.

Фактически Spring Boot имеет автоматическую настройку почти для всех Spring модулей, которые мы сейчас разберем.

Что же из себя представляют спринг модули?

Если перейти на официальный сайт Spring в раздел проекты, то мы увидим очень огромный перечень проектов, который у меня не уместился на одном экране для скриншота.

Spring: обзор проектов

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

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

Как мы видим — здесь есть поддержка реляционных баз данных, не реляционных хранилищ, библиотеки для BigData решений.

Но не нужно пугаться такого разнообразного количества модулей. Фреймворк имеет очень подробную документацию с примерами по каждому модулю.

Чтобы упорядочить все проекты Spring, будет проще все показать на картинке с официально сайта:

обзор спринг

Если следовать картинке выше — то Spring можно поделить на такие категории:

  • Манипуляции с данными (Data Access/Integration).
    Модуль JDBC обеспечивает уровень абстракции JDBC, для удобного имплементирования доступа к базе. Для самых смелых: можете посмотреть как мы имплементировали JDBC без Spring в статье: Работа с базой данных MySql в Java. Модуль ORM предоставляет интеграционные уровни для популярных API объектно-реляционного отображения, включая JPA, JDO, Hibernate и iBatis. Для примера можно посмотреть Spring Boot — пример с Postgres и JPA
  • Веб модули. Самые популярные: REST API и MVC
  • Spring core — поддержка бинов, внедрение зависимостей
  • AOP — аспектно ориентированное программирование. Процесс когда идет внедрение кода для поддержания сквозной функциональности. Aspects, который рядом — это модуль для AOP с помощью библиотеки AspectJ.
  • Модуль Test поддерживает тестирование компонентов с помощью JUnit или TestNG.

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

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

Учить весь перечень библиотек я бы не советовал. Некоторый из них Вы никогда использовать не будете, другие же сразу забудете после написания примера. Гораздо эффективнее учить данный фреймворк при написании проекта чтобы ощутить все его преимущества и недостатки. Можно начать с Spring Boot веб приложение с нуля.

В рамках проекта Java mentor мы также пишем веб приложения используя Spring Boot. Если есть желание — welcome.

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *