Содержание

Проработать

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

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

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

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

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

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

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

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

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

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

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

  104. Comparing Embedded Servlet
  105. Logging

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

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

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

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

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

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

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

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