1 added
1 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#статьи</a></p>
1
<p><a>#статьи</a></p>
2
<ul><li>6 июл 2022</li>
2
<ul><li>6 июл 2022</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><p>Разбираемся в модулях фреймворка и в их основных различиях, запускаем на компьютере и создаём первый проект.</p>
4
</ul><p>Разбираемся в модулях фреймворка и в их основных различиях, запускаем на компьютере и создаём первый проект.</p>
5
<p>Иллюстрация: Colowgee для Skillbox Media</p>
5
<p>Иллюстрация: Colowgee для Skillbox Media</p>
6
<p>Изучает Python, его библиотеки и занимается анализом данных. Любит путешествовать в горах.</p>
6
<p>Изучает Python, его библиотеки и занимается анализом данных. Любит путешествовать в горах.</p>
7
<p>Spring - это популярный фреймворк для разработки на Java, который используют для создания корпоративных приложений, например CRM. При этом применять его могут не только Java-разработчики, но и те, кто работает с Kotlin или Groovy.</p>
7
<p>Spring - это популярный фреймворк для разработки на Java, который используют для создания корпоративных приложений, например CRM. При этом применять его могут не только Java-разработчики, но и те, кто работает с Kotlin или Groovy.</p>
8
<p>Иногда Spring называют фреймворком фреймворков, поскольку он состоит из отдельных модулей: Struts, Hibernate, Tapestry, EJB, JSF и других. Каждый модуль - это набор инструментов для решения технических задач, объединённых общей логикой Spring.</p>
8
<p>Иногда Spring называют фреймворком фреймворков, поскольку он состоит из отдельных модулей: Struts, Hibernate, Tapestry, EJB, JSF и других. Каждый модуль - это набор инструментов для решения технических задач, объединённых общей логикой Spring.</p>
9
<p>Давайте разберёмся, почему появился фреймворк Spring и как с ним работать на примере Java.</p>
9
<p>Давайте разберёмся, почему появился фреймворк Spring и как с ним работать на примере Java.</p>
10
<p>Для разработки веб-приложений программисты долго использовали<a>JavaBeans</a>. Это классы в языке Java, написанные по определённым правилам. Они облегчали разработку компонентов пользовательского интерфейса, но были сильно ограничены в своих возможностях. Например, с ними нельзя управлять транзакциями и безопасностью или реализовывать многопоточность, что очень важно для больших приложений.</p>
10
<p>Для разработки веб-приложений программисты долго использовали<a>JavaBeans</a>. Это классы в языке Java, написанные по определённым правилам. Они облегчали разработку компонентов пользовательского интерфейса, но были сильно ограничены в своих возможностях. Например, с ними нельзя управлять транзакциями и безопасностью или реализовывать многопоточность, что очень важно для больших приложений.</p>
11
<p>Чаще всего эти проблемы беспокоили тех, кто разрабатывал корпоративные приложения, направленные на решение конкретной задачи в рамках большой компании. Например, бухгалтерское программное обеспечение, управление биллингом или CRM-систему.</p>
11
<p>Чаще всего эти проблемы беспокоили тех, кто разрабатывал корпоративные приложения, направленные на решение конкретной задачи в рамках большой компании. Например, бухгалтерское программное обеспечение, управление биллингом или CRM-систему.</p>
12
<p>Решить проблемы JavaBeans пытались с помощью<a>Enterprise JavaBeans</a>(EJB), технологии для написания и поддержки серверной части приложений. Её внедрение позволило облегчить работу над приложениями для бизнеса, так как в ней уже из коробки были поддержка многопоточности, распределённые транзакции и другие подходы, которые отсутствовали в JavaBeans.</p>
12
<p>Решить проблемы JavaBeans пытались с помощью<a>Enterprise JavaBeans</a>(EJB), технологии для написания и поддержки серверной части приложений. Её внедрение позволило облегчить работу над приложениями для бизнеса, так как в ней уже из коробки были поддержка многопоточности, распределённые транзакции и другие подходы, которые отсутствовали в JavaBeans.</p>
13
<p>Но работа с EJB сильно усложняла код из-за необходимости реализации методов обратного вызова жизненного цикла, Home- и Remote-интерфейсов, а также других подходов. Поэтому разработчики не успокоились и продолжали искать другое, более удобное решение для создания корпоративных приложений.</p>
13
<p>Но работа с EJB сильно усложняла код из-за необходимости реализации методов обратного вызова жизненного цикла, Home- и Remote-интерфейсов, а также других подходов. Поэтому разработчики не успокоились и продолжали искать другое, более удобное решение для создания корпоративных приложений.</p>
14
<p>И такое решение появилось в июне 2003 года, когда Род Джонсон выпустил первую версию фреймворка Spring. А уже через год, в марте 2004 года, вышла первая стабильная версия фреймворка - 1.0. На июль 2022 года стабильная версия Spring - 5.3.х. Разберёмся, почему именно Spring стал удачным решением для создания корпоративных приложений.</p>
14
<p>И такое решение появилось в июне 2003 года, когда Род Джонсон выпустил первую версию фреймворка Spring. А уже через год, в марте 2004 года, вышла первая стабильная версия фреймворка - 1.0. На июль 2022 года стабильная версия Spring - 5.3.х. Разберёмся, почему именно Spring стал удачным решением для создания корпоративных приложений.</p>
15
<p>Spring - это набор взаимосвязанных мини-фреймворков, созданных для работы над разными частями приложения. Подключать их можно по отдельности, в зависимости от задач.</p>
15
<p>Spring - это набор взаимосвязанных мини-фреймворков, созданных для работы над разными частями приложения. Подключать их можно по отдельности, в зависимости от задач.</p>
16
Структура модулей в Spring<em>Инфографика:</em><a><em>Spring Framework</em></a><p>Вот какие популярные модули входят в состав Spring.</p>
16
Структура модулей в Spring<em>Инфографика:</em><a><em>Spring Framework</em></a><p>Вот какие популярные модули входят в состав Spring.</p>
17
<p>Модуль для работы с реляционными и нереляционными базами данных: MySQL, Redis, Microsoft Azure Cosmos DB и другими. Включает в себя набор интерфейсов для работы с данными через JPA Entity. Подробно о возможностях модуля<a>написано в официальной документации</a>.</p>
17
<p>Модуль для работы с реляционными и нереляционными базами данных: MySQL, Redis, Microsoft Azure Cosmos DB и другими. Включает в себя набор интерфейсов для работы с данными через JPA Entity. Подробно о возможностях модуля<a>написано в официальной документации</a>.</p>
18
<p>Позволяет работать в распределённых системах, включая персональный компьютер, PaaS-платформы, центры обработки данных и так далее. Внутри Spring Cloud существуют отдельные модули для конкретных решений - например, Spring Cloud Azure интегрирует Spring со службами Azure.</p>
18
<p>Позволяет работать в распределённых системах, включая персональный компьютер, PaaS-платформы, центры обработки данных и так далее. Внутри Spring Cloud существуют отдельные модули для конкретных решений - например, Spring Cloud Azure интегрирует Spring со службами Azure.</p>
19
<p>Кроме непосредственной работы с распределёнными системами Spring Cloud позволяет проводить маршрутизацию, балансировать нагрузку и проводить распределённый обмен сообщениями, что облегчает работу над отдельными задачами. Нюансы работы<a>разобраны в документации к Spring</a>.</p>
19
<p>Кроме непосредственной работы с распределёнными системами Spring Cloud позволяет проводить маршрутизацию, балансировать нагрузку и проводить распределённый обмен сообщениями, что облегчает работу над отдельными задачами. Нюансы работы<a>разобраны в документации к Spring</a>.</p>
20
<p>Java -<a>объектно-ориентированный язык</a>, но Spring основан на другой парадигме: аспектно-ориентированном программировании (АОП).</p>
20
<p>Java -<a>объектно-ориентированный язык</a>, но Spring основан на другой парадигме: аспектно-ориентированном программировании (АОП).</p>
21
<p>Аспектно-ориентированное программирование направлено на повышение модульности программы за счёт разделения задач внутри неё. Для этого обычно не меняют существующий код, а дописывают новый.</p>
21
<p>Аспектно-ориентированное программирование направлено на повышение модульности программы за счёт разделения задач внутри неё. Для этого обычно не меняют существующий код, а дописывают новый.</p>
22
<p>Классический пример АОП - применение политики безопасности. С одной стороны, она должна применяться ко всем частям приложения, а с другой стороны - быть самостоятельной сущностью, которую можно развивать отдельно от остального кода. Если работать с политикой безопасности по АОП, то она выносится в отдельный модуль и дальнейшая работа над ней, а также поддержка и рефакторинг проводятся независимо от основного приложения.</p>
22
<p>Классический пример АОП - применение политики безопасности. С одной стороны, она должна применяться ко всем частям приложения, а с другой стороны - быть самостоятельной сущностью, которую можно развивать отдельно от остального кода. Если работать с политикой безопасности по АОП, то она выносится в отдельный модуль и дальнейшая работа над ней, а также поддержка и рефакторинг проводятся независимо от основного приложения.</p>
23
<p>Подробнее про АОП в Spring<a>написано в официальной документации</a>.</p>
23
<p>Подробнее про АОП в Spring<a>написано в официальной документации</a>.</p>
24
<p>Транзакция в Java - это последовательность запросов к базе данных, объединённая в один блок. Модуль транзакций в Spring позволяет управлять такими блоками, повышая безопасность и эффективность работы с СУБД. Работать можно с любыми вариантами транзакций: вложенными, локальными и глобальными. Узнать о возможностях модуля и особенностях его работы<a>можно из документации</a>.</p>
24
<p>Транзакция в Java - это последовательность запросов к базе данных, объединённая в один блок. Модуль транзакций в Spring позволяет управлять такими блоками, повышая безопасность и эффективность работы с СУБД. Работать можно с любыми вариантами транзакций: вложенными, локальными и глобальными. Узнать о возможностях модуля и особенностях его работы<a>можно из документации</a>.</p>
25
<p>Это лишь самые популярные модули, а в Spring существует ещё несколько десятков других модулей, которые подробно<a>разобраны в документации к фреймворку</a>. И лучше всего знакомиться с ними на практике.</p>
25
<p>Это лишь самые популярные модули, а в Spring существует ещё несколько десятков других модулей, которые подробно<a>разобраны в документации к фреймворку</a>. И лучше всего знакомиться с ними на практике.</p>
26
<p>Если искать информацию про работу и установку фреймворка Spring, то часто можно встретить упоминание Spring Boot. Spring Boot - это дополнение к Spring, которое облегчает и ускоряет работу с ним. Сам Spring Boot представляет собой набор утилит, автоматизирующих настройки фреймворка. Вот что он берёт на себя:</p>
26
<p>Если искать информацию про работу и установку фреймворка Spring, то часто можно встретить упоминание Spring Boot. Spring Boot - это дополнение к Spring, которое облегчает и ускоряет работу с ним. Сам Spring Boot представляет собой набор утилит, автоматизирующих настройки фреймворка. Вот что он берёт на себя:</p>
27
<ul><li>упаковывает зависимости в starter-пакеты;</li>
27
<ul><li>упаковывает зависимости в starter-пакеты;</li>
28
<li>автоматически конфигурирует приложения с помощью jar-зависимостей;</li>
28
<li>автоматически конфигурирует приложения с помощью jar-зависимостей;</li>
29
<li>создаёт веб-сервер, что позволяет локально запускать на нём приложения.</li>
29
<li>создаёт веб-сервер, что позволяет локально запускать на нём приложения.</li>
30
</ul><p>Для работы с фреймворком Spring предстоит пройти несколько шагов:</p>
30
</ul><p>Для работы с фреймворком Spring предстоит пройти несколько шагов:</p>
31
<ul><li>Подготовить IDE и JDK.</li>
31
<ul><li>Подготовить IDE и JDK.</li>
32
<li>Создать новый проект на Spring Boot.</li>
32
<li>Создать новый проект на Spring Boot.</li>
33
<li>Подготовить проект в IDE к работе.</li>
33
<li>Подготовить проект в IDE к работе.</li>
34
<li>Запустить код и увидеть результат.</li>
34
<li>Запустить код и увидеть результат.</li>
35
</ul><p>Для начала работы вам потребуются две вещи:</p>
35
</ul><p>Для начала работы вам потребуются две вещи:</p>
36
<ul><li>Любая интегрированная среда разработки (IDE). Подойдёт одна из популярных IDE:<a>IntelliJ IDEA</a>,<a>Spring Tools</a>для Eclipse,<a>Visual Studio Code</a>.</li>
36
<ul><li>Любая интегрированная среда разработки (IDE). Подойдёт одна из популярных IDE:<a>IntelliJ IDEA</a>,<a>Spring Tools</a>для Eclipse,<a>Visual Studio Code</a>.</li>
37
<li>Средства разработки Java (JDK). Официальный сайт фреймворка Spring рекомендует воспользоваться<a>BellSoft Liberica JDK</a>версии 8 или 11.</li>
37
<li>Средства разработки Java (JDK). Официальный сайт фреймворка Spring рекомендует воспользоваться<a>BellSoft Liberica JDK</a>версии 8 или 11.</li>
38
</ul><p>Самый простой способ подготовить фреймворк для работы - воспользоваться сайтом<a>start.spring.io</a>для создания веб-проекта.</p>
38
</ul><p>Самый простой способ подготовить фреймворк для работы - воспользоваться сайтом<a>start.spring.io</a>для создания веб-проекта.</p>
39
<p>Важно: в пункте Dependencies не забудьте добавить зависимость Web. После этого нажмите кнопку Generate и скачайте ZIP-архив. Распакуйте его в нужную папку на вашем компьютере, и у вас будет готов каркас будущего проекта. Интерфейс сборки - Spring Boot. Версия - последняя стабильная. На 3 июля 2022 года это 2.7.1.</p>
39
<p>Важно: в пункте Dependencies не забудьте добавить зависимость Web. После этого нажмите кнопку Generate и скачайте ZIP-архив. Распакуйте его в нужную папку на вашем компьютере, и у вас будет готов каркас будущего проекта. Интерфейс сборки - Spring Boot. Версия - последняя стабильная. На 3 июля 2022 года это 2.7.1.</p>
40
<em>Скриншот: Spring Framework / Skillbox Media</em><p>Проекты, созданные на start.spring.io, уже содержат Spring Boot. Это фреймворк, который делает Spring готовым к работе внутри вашего приложения, но не требует написания большого количества кода или сложного конфигурирования. Spring Boot - самый быстрый и популярный способ запуска Spring-проектов.</p>
40
<em>Скриншот: Spring Framework / Skillbox Media</em><p>Проекты, созданные на start.spring.io, уже содержат Spring Boot. Это фреймворк, который делает Spring готовым к работе внутри вашего приложения, но не требует написания большого количества кода или сложного конфигурирования. Spring Boot - самый быстрый и популярный способ запуска Spring-проектов.</p>
41
<p>Некоторые IDE необходимо подготовить к работе, например Visual Studio Code. Для этого внутри приложения необходимо перейти в раздел "Расширения" и найти расширение Spring Boot Extension Pack. После его установки Visual Studio Code будет готова к работе.</p>
41
<p>Некоторые IDE необходимо подготовить к работе, например Visual Studio Code. Для этого внутри приложения необходимо перейти в раздел "Расширения" и найти расширение Spring Boot Extension Pack. После его установки Visual Studio Code будет готова к работе.</p>
42
Для работы с Visual Studio Code необходимо установить расширение Spring Boot Extension Pack<em>Скриншот: Visual Studio Code / Skillbox Media</em><p>Если вы используете IntelliJ IDEA, то она уже готова к работе с фреймворком Spring. Откройте установленную IDE и создайте новый проект. Назовите его удобным для себя образом. Рассмотрим следующие шаги на примере IntelliJ IDEA.</p>
42
Для работы с Visual Studio Code необходимо установить расширение Spring Boot Extension Pack<em>Скриншот: Visual Studio Code / Skillbox Media</em><p>Если вы используете IntelliJ IDEA, то она уже готова к работе с фреймворком Spring. Откройте установленную IDE и создайте новый проект. Назовите его удобным для себя образом. Рассмотрим следующие шаги на примере IntelliJ IDEA.</p>
43
<p>Выберите в меню пункт File и команду Open. Найдите файл DemoApplication.java в папке src/main/java/com/example/demo</p>
43
<p>Выберите в меню пункт File и команду Open. Найдите файл DemoApplication.java в папке src/main/java/com/example/demo</p>
44
Открытие файла в интерфейсе IntelliJ IDEA<em>Скриншот: IntelliJ IDEA / Skillbox Media</em>Открытие файла в интерфейсе IntelliJ IDEA<em>Скриншот: IntelliJ IDEA / Skillbox Media</em><p>Теперь измените содержимое файла, добавив дополнительный метод hello() и аннотации @SpringBootApplication и @RestController, показанные в приведённом ниже коде. Вы можете просто скопировать и вставить код в текст файла:</p>
44
Открытие файла в интерфейсе IntelliJ IDEA<em>Скриншот: IntelliJ IDEA / Skillbox Media</em>Открытие файла в интерфейсе IntelliJ IDEA<em>Скриншот: IntelliJ IDEA / Skillbox Media</em><p>Теперь измените содержимое файла, добавив дополнительный метод hello() и аннотации @SpringBootApplication и @RestController, показанные в приведённом ниже коде. Вы можете просто скопировать и вставить код в текст файла:</p>
45
package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @GetMapping("/hello") public String hello(@RequestParam(value = "name", defaultValue = "World") String name) { return String.format("Hello %s!", name); } }<p>Метод hello(), который мы добавили, принимает параметр name с типом String, а затем объединяет этот параметр со словом "Hello" в коде. Это означает, что если вы зададите в запросе имя "Антон", то ответом будет "Hello Антон". Имя прописывается вручную в параметре defaultValue.</p>
45
package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @GetMapping("/hello") public String hello(@RequestParam(value = "name", defaultValue = "World") String name) { return String.format("Hello %s!", name); } }<p>Метод hello(), который мы добавили, принимает параметр name с типом String, а затем объединяет этот параметр со словом "Hello" в коде. Это означает, что если вы зададите в запросе имя "Антон", то ответом будет "Hello Антон". Имя прописывается вручную в параметре defaultValue.</p>
46
<p>Аннотация @RestController сообщает Spring, что этот код описывает конечную точку, которая должна быть доступна через веб. Аннотация @GetMapping ("/hello") указывает Spring, что надо использовать наш метод hello() для ответа на запросы, отправленные на адрес http://localhost:8080/hello. Наконец, @RequestParam указывает Spring, что в запросе должно быть значение name, а если его там нет, то использовать по умолчанию строку "World".</p>
46
<p>Аннотация @RestController сообщает Spring, что этот код описывает конечную точку, которая должна быть доступна через веб. Аннотация @GetMapping ("/hello") указывает Spring, что надо использовать наш метод hello() для ответа на запросы, отправленные на адрес http://localhost:8080/hello. Наконец, @RequestParam указывает Spring, что в запросе должно быть значение name, а если его там нет, то использовать по умолчанию строку "World".</p>
47
<p>Теперь давайте соберём и запустим программу. Так как наша IDE уже готова к работе с фреймворком Spring, а сам проект создан в Spring Boot, который мы скачали с официального сайта, то сделать это просто.</p>
47
<p>Теперь давайте соберём и запустим программу. Так как наша IDE уже готова к работе с фреймворком Spring, а сам проект создан в Spring Boot, который мы скачали с официального сайта, то сделать это просто.</p>
48
<p>Откройте командную строку (или терминал) и перейдите в папку, где находятся файлы проекта. Мы можем собрать и запустить приложение, выполнив следующую команду:</p>
48
<p>Откройте командную строку (или терминал) и перейдите в папку, где находятся файлы проекта. Мы можем собрать и запустить приложение, выполнив следующую команду:</p>
49
<p><strong>macOS/Linux:</strong></p>
49
<p><strong>macOS/Linux:</strong></p>
50
<p><strong>Windows:</strong></p>
50
<p><strong>Windows:</strong></p>
51
<p>На выходе получим что-то подобное:</p>
51
<p>На выходе получим что-то подобное:</p>
52
Результат запуска кода в терминале<em>Скриншот:<a>Spring Framework</a>/ Skillbox Media</em><p>Последние несколько строк говорят нам о том, что Spring запущен. Встроенный в Spring Boot сервер Apache Tomcat работает в качестве веб-сервера и прослушивает запросы на порту localhost 8080. Откройте браузер и в адресной строке введите http://localhost:8080/hello. Вы должны получить такой ответ:</p>
52
Результат запуска кода в терминале<em>Скриншот:<a>Spring Framework</a>/ Skillbox Media</em><p>Последние несколько строк говорят нам о том, что Spring запущен. Встроенный в Spring Boot сервер Apache Tomcat работает в качестве веб-сервера и прослушивает запросы на порту localhost 8080. Откройте браузер и в адресной строке введите http://localhost:8080/hello. Вы должны получить такой ответ:</p>
53
Работа локального сервера<em>Скриншот:<a>Spring Framework</a>/ Skillbox Media</em><p>Поздравляем! Вы сделали свой первый проект на фреймворке Spring. Теперь можно углубиться в документацию фреймворка или пойти на специализированный курс по работе со Spring.</p>
53
Работа локального сервера<em>Скриншот:<a>Spring Framework</a>/ Skillbox Media</em><p>Поздравляем! Вы сделали свой первый проект на фреймворке Spring. Теперь можно углубиться в документацию фреймворка или пойти на специализированный курс по работе со Spring.</p>
54
<p>На "<a>Хабр Карьере</a>" доступно более 300 вакансий разработчиков со знанием Spring. Для сравнения, количество вакансий для Java-разработчиков - более 1100, а для Node.js-разработчиков - 180. Кроме фреймворка необходимо знать сам язык Java, работать с разными базами данных, пользоваться Git и таск-трекерами типа Jira.</p>
54
<p>На "<a>Хабр Карьере</a>" доступно более 300 вакансий разработчиков со знанием Spring. Для сравнения, количество вакансий для Java-разработчиков - более 1100, а для Node.js-разработчиков - 180. Кроме фреймворка необходимо знать сам язык Java, работать с разными базами данных, пользоваться Git и таск-трекерами типа Jira.</p>
55
<p>Зарплата зависит от уровня разработчика. Джуниоры получают от 50 тысяч рублей, а сеньоры - от 200 тысяч. Разработчик среднего уровня может рассчитывать на зарплату от 100 до 250 тысяч рублей.</p>
55
<p>Зарплата зависит от уровня разработчика. Джуниоры получают от 50 тысяч рублей, а сеньоры - от 200 тысяч. Разработчик среднего уровня может рассчитывать на зарплату от 100 до 250 тысяч рублей.</p>
56
-
<em>Скриншот: "Хабр Карьера" / Skillbox Media</em><p>Фреймворк Spring помогает облегчить разработку приложений на Java с помощью специализированных модулей и аспектно-ориентированного программирования. Углубиться в изучение фреймворка лучше с помощью<a>официальной документации</a>.</p>
56
+
<em>Скриншот: "Хабр Карьера" / Skillbox Media</em><p>Фреймворк Spring помогает облегчить разработку приложений на Java с помощью специализированных модулей и аспектно-ориентированного программирования. Углубиться в изучение фреймворка лучше с помощь��<a>официальной документации</a>.</p>
57
<a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
57
<a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>