Содержание

Проработать

    Basic

  1. Евгений Борисов - Spring
  2. Евгений Борисов - Spring
  3. Максим Добрынин | ex. Jetbulb
  4. Spring Framework. Бины
  5. Spring Framework. Жизненный цикл
  6. 10 Spring and Spring Boot Common Mistakes You Need To STOP
  7. Spring MVC — Hello World, пример приложения.
  8. Spring Framework - The Basics
  9. Введение в Spring, или что делать, если по всему проекту @Autowired и @Component, а вы не понимаете, что это
  10. Spring Framework Guide
  11. Как писать на Spring в 2017
  12. Bean scopes
  13. Dependency Injection и Spring
  14. Spring изнутри. Этапы инициализации контекста
  15. Spring для ленивых. Основы, базовые концепции и примеры с кодом. Часть 2
  16. Обратная сторона Spring
  17. Injecting Prototype Beans into a Singleton Instance in Spring
  18. Внедрение зависимостей через поля — плохая практика
  19. Spring: вопросы к собеседованию
  20. 01 - Spring. Введение
  21. Spring для ленивых. Основы, базовые концепции и примеры с кодом. Часть 1
  22. Как использовать аннотацию @Lookup
  23. Краткое введение во внедрение зависимостей: что это и когда это необходимо использовать
  24. Основы внедрения зависимостей
  25. Spring: в поисках контекста
  26. Евгений Борисов — Spring-потрошитель, часть 1
  27. Урок 2: Введение в Spring IoC контейнер
  28. Обработка исключений в контроллерах Spring
  29. Spring-потрошитель: жизненный цикл Spring Framework
  30. Введение в Spring Boot: создание простого REST API на Java
  31. Java, реактивное программирование, Reactor, Spring Cloud Function, Streams, etc…
  32. 1.1 Реактивное программирование в действии
  33. Что мы делаем не так со Спрингом
  34. Spring – лучший Java фреймворк для создания веб-приложений
  35. Learn Spring Fundamentals for Beginners - Full Course
  36. 6 способов выполнения метода при старте Spring Boot приложения
  37. Spring Boot ПОЛНЫЙ курс для начинающих [2025]
  38. Spring Framework. Введение
  39. Spring БАЗА 3 часа | Полный гайд
  40. Spring bean life cycle
  41. Как работает @Lazy в Spring — и когда он полезен
  42. Spring без боли: моя шпаргалка для собесов в Java. Часть 3
  43. Эволюция Spring: от борьбы с J2EE до реактивности и облаков
  44. Что такое реактивное программирование? Руководство для начинающих по написанию реактивного кода
  45. Как дефолтная пагинация в Spring сломала проект и как это починить
  46. Spring vs Spring Boot - разница
  47. Вопросы
  48. Собеседование по Java EE — Spring Framework (вопросы и ответы). Часть 1
  49. 75 вопросов и ответов на собеседование по Spring
  50. Транзакции

  51. The best way to use the Spring Transactional annotation
  52. Spring Transaction Best Practices
  53. Spring MVC

  54. Spring MVC — основные принципы
  55. Spring’s RequestBody and ResponseBody Annotations
  56. Изучаем ResponseEntity и избавляемся от него в контроллерах Spring
  57. Spring MVC — загрузка файла с валидацией
  58. Разработка интернет-магазина на Spring Framework
  59. Top 10 Spring Boot REST API Best Practices You MUST Know
  60. Ускорение Spring REST API на 200%
  61. Метрики

  62. Сбор метрик Spring Boot приложения c помощью Prometheus и Grafana
  63. Мониторинг с Grafana. Best practices
  64. Prometheus - Все Основы Мониторинга, как всё это работает и зачем он вообще нужен?
  65. Error handling

  66. Як правильно робити Error handling по Clean Code
  67. How to Handle REST exception in Spring Boot Application? Example Tutorial
  68. Кеширование

  69. Кеширование в Spring Framework 3.1
  70. Кеширование данных — Java Spring
  71. Java Spring Boot [2024] Part 11: Cache
  72. @Cache Spring
  73. HikariCP - подключаемый пул соединений на Spring

  74. HikariCP — самый быстрый пул соединений на java
  75. Настройка пула соединений Hikari с помощью Spring Boot
  76. About Pool Sizing
  77. Spring Security

  78. Основы работы с Spring Security
  79. Подключаем Spring Security к новому проекту - Break IT
  80. Spring Security Architecture Explained
  81. Аутентификация - Spring Security в деталях
  82. API Authentication & Security - Java: Про ІТ під каву - #7
  83. Виды авторизации: сессии, JWT-токены. Для чего нужны сессии? Как работает JWT? (+ разбор ошибки)
  84. Аутентификация в Веб-Приложениях 👨‍💻JWT и Сессии
  85. JWT. Часть 1. Теория
  86. JWT как строить архитектуру
  87. Security со Spring Boot 3.1 | Авторизация и Аутентификация
  88. Безопасный Spring REST с применением Spring Security и OAuth2
  89. Павел Кислов — OAuth 2, JWT, OIDC. Все, что нам недорассказали в Spring
  90. Spring Security, Формы регистрации и аутентицикации
  91. Cross-Site Resource Forgery (CSRF) - Spring Security
  92. Авторизация в Spring Boot приложении с Spring Security 3.1.0 и PostgreSQL
  93. Spring Cloud

  94. Использование Spring Cloud для микросервисов на Spring Boot
  95. REST Requests

  96. Exchange method of Spring RestTemplate - Part 1 || Calling REST API using RestTemplate
  97. Testcontainers

  98. Testcontainers: тестирование с реальными зависимостями
  99. Введение в Testcontainers. Прокачиваем интеграционные тесты.
  100. Testcontainers Интеграционные тесты для баз данных
  101. Тестируем работу с БД из SpringBoot: TestContainers, DBUnit и все-все-все
  102. Embedded Servlet

  103. Comparing Embedded Servlet
  104. Logging

  105. Logging in Spring Boot
  106. Ведение журнала в Spring Boot
  107. The best way to log SQL statements with Spring Boot
  108. Adding Request Logging to Spring Boot APIs
  109. DB connection

  110. JOOQ – разбираем Java-библиотеку | SoftTeco Meetup
  111. JOOQ — не замена Hibernate. Они решают разные проблемы
  112. Реактивного программирования

  113. Основы реактивного программирования на Java, лекция 1
  114. АОП

  115. АОП в Spring Framework
  116. Паттерны

  117. Паттерн Стратегия в Spring Boot на практике - самое понятное объяснение. Enum, Map, Java
  118. Kafka

  119. Spring-boot-starter для паттерна Transaction outbox Kafka
  120. Документация

  121. Еще один путь снизить боль при работе с Java проектами и их документирование
  122. Продуктивность

  123. Коли прод росте на 1000% | Виклики на Різдво | Java: Про ІТ під каву - #49
  124. Throttling - процесс лимитирования обработки запросов за определенное время Разобрать возможности тротлинга на spring.
  125. Implementing Throttling in Java (Spring Boot)
  126. How to Implement Request Throttling for High-Traffic APIs in Spring Boot
  127. JOOQ
  128. Что такое JOOQ и как его едят на примере Kotlin + Gradle + JOOQ

Что это:

Spring Framework - один из самых популярных наборов фреймворков для создания веб-приложений на Java.

Spring projects:

REST Requests

Transaction

Spring Transaction

BD connection

JOOQ

JOOQ - создает сущности на основе БД, путем подключения и получения необходимых данных.

Для запуска необходима заполненная БД.

Logging

Логирование через Lombok

Validation в Spring-boot

Hibernate validation

Тестирование

Testing

Bean scope(Spring stereotypes):

  1. singleton(by default) - определяет один единственный бин для каждого контейнера Spring IoC. Создаётся при старте приложения и удаляется в конце.
  2. prototype - любое количество экземпляров bean. Не храниться в Spring context, значит preDestroy и etc - не будут выполняться. Если он создается в singleton бине, то создан будет только 1 такой бин. Создаётся при вызове и удаляется GC.
  3. request - один экземпляр bean на каждый HTTP запрос. Касается исключительно ApplicationContext.
  4. session - один экземпляр bean на каждую HTTP сессию. Касается исключительно ApplicationContext.
  5. global session - аналогичен session - он используется в портлетных веб приложениях. Когда вы используете globalSession в "стандартном" сервлетном приложении эти beans имеют scope session.

Spring аннотации:

Controller annotations:

Аннотации для создания Bean(Annotations):

Аннотации для создания Bean(Java configuration):

Advice

Cache

Async

  1. @Async - помечает метод как асинхронный.
  2. @EnableAsync - включает поддержку асинхронного выполнения методов в Spring.

События

  1. @EventListener - подписывается на события приложения.

Другие:

АОП(AOP)

АОП(AOP) - Аспектно-ориентированное программирование. Идея АОП заключается в выделении так называемой сквозной функциональности. Помогает разделить бизнес логику примеры: логгирование, обработка исключений, трассировка, аутентификация и проверка прав доступа.

Spring bean lifecycle:

  1. Container started
  2. Bean Definition - создание описание параметров Bean для Spring, через @Configuration, @ComponentScan, XML и т.д. - читая описания Bean. Scope, Lazy or not, Dependencies, init/destroy, methods.
  3. Bean instantiated - создание экземпляра Bean через Constructor. Singleton(во время старта контекста(eager)), prototype(при каждом getBean()), @Lazy(при первом использовании).
  4. Dependencies Injected - внедрение зависимостей. @Autowired, @Value, @Inject.
  5. Aware interfaces - если бин реализует: BeanNameAware, BeanFactoryAware, ApplicationContextAware. Spring передаёт Bean контекстную информацию.
  6. BeanPostProcessor(before) - postProcessBeforeInitialization(). Используется для: прокси, AOP, кастомной логики.
  7. @PostConstruct/afterPropertiesSet - выполняется один раз. @PostConstruct/InitializingBean.afterPropertiesSet()/init-method.
  8. BeanPostProcessor(after) - postProcessAfterInitialization(). Здесь часто создаются AOP-прокси.
  9. Bean ready - Spring отдаёт бин в приложение.
  10. @PreDestroy - уничтожение Bean. @PreDestroy, DisposableBean.destroy(), destroy-method.

Для управления созданием и уничтожением bean у нас есть методы:

  1. init-method
  2. destroy-method
  3. @PostConstruct
  4. @PreDestroy

Создание компонента:

Spring Value

Пример создания пустого List как default

@Value("${my.list.of.strings:}#{T(java.util.Collections).emptyList()}")
private List<String> myList;
    

Интерфейсы для слоев DAO и Service

Интерфейсы нужны для возможности замены реализации не затрагивая основной код. При использовании интерфейсов основной код ничего не знает об деталях реализации (слабая связанность). Соответственно, реализацию можно вынести в отдельный модуль (изолировать сложность). Если реализация отделена от основного кода, то становится легко подменить её в тестах, например, подсунуть in memory реализацию, вместо БД.

Метрики

Java metrics + Grafana - это обычно связка инструментов для сбора, хранения и визуализации метрик работы Java-приложения.

Метрики — это числовые показатели состояния приложения и JVM (например, использование памяти, загрузка CPU, количество потоков, задержки запросов).

В Java их часто собирают с помощью библиотек:

Примеры метрик:

Как Grafana вписывается

Grafana сама по себе данные не собирает, а только строит дашборды и графики.

Java приложение → Micrometer / JMX → Prometheus (или InfluxDB) → Grafana

Возможности Spring Application

Добавление ограничения на getAll endpoint