Содержание

Проработать

    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. Обзор модулей Spring для Java
  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. Дополнительные возможности ApplicationContext
  36. Spring – лучший Java фреймворк для создания веб-приложений
  37. Learn Spring Fundamentals for Beginners - Full Course
  38. 6 способов выполнения метода при старте Spring Boot приложения
  39. Spring Boot ПОЛНЫЙ курс для начинающих [2025]
  40. Spring Framework. Введение
  41. Spring БАЗА 3 часа | Полный гайд
  42. Spring bean life cycle
  43. Как работает @Lazy в Spring — и когда он полезен
  44. Spring без боли: моя шпаргалка для собесов в Java. Часть 3
  45. Эволюция Spring: от борьбы с J2EE до реактивности и облаков
  46. Что такое реактивное программирование? Руководство для начинающих по написанию реактивного кода
  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 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. Embedded Servlet

  102. Comparing Embedded Servlet
  103. Logging

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

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

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

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

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

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

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

Что это:

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 контекста:

  1. XML - ClassPathXmlApplicationContext(”context.xml”). Был изначальным методом.
  2. Annotations(с указанием пакета для сканирования) - AnnotationConfigApplicationContext(”package.name”).
  3. Java configuration - AnnotationConfigApplicationContext(JavaConfig.class). конфигурация через аннотации с указанием класса (или массива классов) помеченного аннотацией @Configuration. Используется если необходимо создать bean класса, который не имеет spring аннотаций.
  4. Groovy - GenericGroovyApplicationContext(”context.groovy”)

Имена в spring контексте

  1. При создании через @Component, etc - имя bean будет использовано имя аннотированного класса.
  2. При создании через @Bean - имя bean будет использовано имя аннотированного метода.

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