Содержание
Проработать
Basic
- Евгений Борисов - Spring
- Максим Добрынин | ex. Jetbulb
- Spring Framework. Бины
- Spring Framework. Жизненный цикл
- 10 Spring and Spring Boot Common Mistakes You Need To STOP
- Spring MVC — Hello World, пример приложения.
- Spring Framework - The Basics
- Введение в Spring, или что делать, если по всему проекту @Autowired и @Component, а вы не понимаете, что это
- Spring Framework Guide
- Как писать на Spring в 2017
- Bean scopes
- Dependency Injection и Spring
- Spring изнутри. Этапы инициализации контекста
- Spring для ленивых. Основы, базовые концепции и примеры с кодом. Часть 2
- Обратная сторона Spring
- Обзор модулей Spring для Java
- Injecting Prototype Beans into a Singleton Instance in Spring
- Внедрение зависимостей через поля — плохая практика
- Spring: вопросы к собеседованию
- 01 - Spring. Введение
- Spring для ленивых. Основы, базовые концепции и примеры с кодом. Часть 1
- Как использовать аннотацию @Lookup
- Краткое введение во внедрение зависимостей: что это и когда это необходимо использовать
- Основы внедрения зависимостей
- Spring: в поисках контекста
- Евгений Борисов — Spring-потрошитель, часть 1
- Урок 2: Введение в Spring IoC контейнер
- Обработка исключений в контроллерах Spring
- Spring-потрошитель: жизненный цикл Spring Framework
- Введение в Spring Boot: создание простого REST API на Java
- Java, реактивное программирование, Reactor, Spring Cloud Function, Streams, etc…
- Что мы делаем не так со Спрингом
- Дополнительные возможности ApplicationContext
- Spring – лучший Java фреймворк для создания веб-приложений
- Learn Spring Fundamentals for Beginners - Full Course
- 6 способов выполнения метода при старте Spring Boot приложения
- Spring Boot ПОЛНЫЙ курс для начинающих [2025]
- Spring Framework. Введение
- Spring vs Spring Boot - разница
- Вопросы
- Собеседование по Java EE — Spring Framework (вопросы и ответы). Часть 1
- 75 вопросов и ответов на собеседование по Spring
Spring MVC
- Spring MVC — основные принципы
- Spring’s RequestBody and ResponseBody Annotations
- web.xml и маппинг сервлетов
- Изучаем ResponseEntity и избавляемся от него в контроллерах Spring
- Spring MVC — загрузка файла с валидацией
- Разработка интернет-магазина на Spring Framework
Метрики
- Сбор метрик Spring Boot приложения c помощью Prometheus и Grafana
- Мониторинг с Grafana. Best practices
Error handling
- Як правильно робити Error handling по Clean Code
Кеширование
- Кеширование в Spring Framework 3.1
- Кеширование данных — Java Spring
- Java Spring Boot [2024] Part 11: Cache
- @Cache Spring
HikariCP - подключаемый пул соединений на Spring
- HikariCP — самый быстрый пул соединений на java
- Настройка пула соединений Hikari с помощью Spring Boot
- About Pool Sizing
Spring Security
- Основы работы с Spring Security
- Подключаем Spring Security к новому проекту - Break IT
- Spring Security Architecture Explained
- Аутентификация - Spring Security в деталях
- API Authentication & Security - Java: Про ІТ під каву - #7
- Виды авторизации: сессии, JWT-токены. Для чего нужны сессии? Как работает JWT? (+ разбор ошибки)
- Аутентификация в Веб-Приложениях 👨💻JWT и Сессии
- JWT. Часть 1. Теория
- JWT как строить архитектуру
Spring Cloud
- Использование Spring Cloud для микросервисов на Spring Boot
REST Requests
- Exchange method of Spring RestTemplate - Part 1 || Calling REST API using RestTemplate
Testcontainers
- Testcontainers: тестирование с реальными зависимостями
- Введение в Testcontainers. Прокачиваем интеграционные тесты.
- Testcontainers Интеграционные тесты для баз данных
Embedded Servlet
- Comparing Embedded Servlet
Logging
- Logging in Spring Boot
- Ведение журнала в Spring Boot
DB connection
- JOOQ – разбираем Java-библиотеку | SoftTeco Meetup
- JOOQ — не замена Hibernate. Они решают разные проблемы
Реактивного программирования
- Основы реактивного программирования на Java, лекция 1
АОП
- АОП в Spring Framework
Продуктивность
- Коли прод росте на 1000% | Виклики на Різдво | Java: Про ІТ під каву - #49
- Throttling - процесс лимитирования обработки запросов за определенное время Разобрать возможности тротлинга на spring.
- Implementing Throttling in Java (Spring Boot)
Что это:
Spring Framework - один из самых популярных наборов фреймворков для создания веб-приложений на Java.
Spring projects:
- Spring Framework(core)
- Spring Boot
- Spring MVC
- Spring JDBC
- Spring Data
- Spring Doc
- Spring Cloud
- Spring Data
- Spring Security
- Spring Security
- Spring Session
- Spring Vault - предназначен для интеграции с HashiCorp Vault, который является инструментом для
управления секретами, ключами доступа и другой конфиденциальной информацией в распределённых приложениях.
- Spring CDS(Class Data Sharing) - это механизм, который используется для оптимизации времени запуска Java
приложений, включая приложения, основанные на Spring. Сокращает время загрузки классов и уменьшить
использование памяти путем предварительной загрузки и кэширования некоторых системных классов и
библиотек в специально подготовленные файлы, называемые архивами классов.
- AOP
- Вопросы на собеседование
REST Requests
Transaction
Spring Transaction
BD connection
JOOQ
JOOQ - создает сущности на основе БД, путем подключения и получения необходимых данных.
Для запуска необходима заполненная БД.
Logging
Логирование через Lombok
Validation в Spring-boot
Hibernate validation
Тестирование
Testing
Bean scope:
- singleton(by default) - определяет один единственный бин для каждого контейнера Spring IoC.
- prototype - любое количество экземпляров bean. Не храниться в Spring context, значит preDestroy и etc
- не будут выполняться. Если он создается в singleton бине, то создан будет только 1 такой бин.
- request - один экземпляр bean на каждый HTTP запрос. Касается исключительно ApplicationContext.
- session - один экземпляр bean на каждую HTTP сессию. Касается исключительно ApplicationContext.
- global session - аналогичен session - он используется в портлетных веб приложениях. Когда вы используете
globalSession в "стандартном" сервлетном приложении эти beans имеют scope session.
Инициализация spring контекста:
- XML - ClassPathXmlApplicationContext(”context.xml”). Был изначальным методом.
- Annotations(с указанием пакета для сканирования) - AnnotationConfigApplicationContext(”package.name”).
- Java configuration - AnnotationConfigApplicationContext(JavaConfig.class). конфигурация через аннотации
с указанием класса (или массива классов) помеченного аннотацией @Configuration. Используется если
необходимо создать bean класса, который не имеет spring аннотаций.
- Groovy - GenericGroovyApplicationContext(”context.groovy”)
Имена в spring контексте
- При создании через @Component, etc - имя bean будет использовано имя аннотированного класса.
- При создании через @Bean - имя bean будет использовано имя аннотированного метода.
Spring аннотации:
Controller annotations:
- @ResponseBody - показывает что данный метод может возвращать кастомный объект в виде xml, json...
- @RequestMapping - используется для маппинга url запроса на указанный метод или класс(общий префикс url).
Можно указывать конкретный HTTP-метод, который будет обрабатываться (GET/POST), передавать
параметры запроса?, пример: @RequestMapping(method = RequestMethod.GET).
- @PathVariable - показывает, что параметр метода должен быть связан с переменной из урл-адреса.
- @GetMapping - указывает GET mapping для метода.
- @PostMapping - указывает POST mapping для метода.
- @PutMapping - указывает PUT mapping для метода.
- @PatchMapping - указывает PATCH mapping для метода.
- @DeleteMapping - указывает DELETE mapping для метода.
Аннотации для создания Bean(Annotations):
- @Component - общий компонент фреймворка.
- @Controller - подтип класса @Component для контроллеров. Похож на обычный сервлет (HttpServlet)
(работающий с объектами HttpServletRequest и HttpServletResponse). Просматривает классы, аннотированные
@Controller и обнаруживает в них аннотации @RequestMapping. Нужен для ответа веб страницей.
- @RestController - @Controller + @ResponseBody. Нужен для ответа телом(JSON, XML и
тд.).
- @Service - подтип класса @Component для сервис-слоя.
- @Repository - подтип класса @Component для DAO слоя. Перехватывает исключения из базы и меняет их под
стандарты Spring.
Аннотации для создания Bean(Java configuration):
Advice
- @ControllerAdvice - для оборачивания объекта, возвращаемого контроллерами, в новый класс на уровне
DispatcherServlet.
- @RestControllerAdvice - @ControllerAdvice + @ResponseBody
Другие:
- @Autowired - автоматически установить значение поля.
- @Transactional - перед исполнением метода помеченного данной аннотацией начинается транзакция,
после выполнения метода транзакция коммитится, при выбрасывании RuntimeException откатывается.
- @Lookup - помечается метод, который будет возвращать разные объекты при каждом вызове метода.
- @PostConstruct - аннотация для метода, который будет вызван после вызова конструктора бина.
- @PreDestroy - аннотация для метода, который будет вызван перед уничтожением бина.
- @Qualifier - используется совместно с @Autowired для уточнения данных связывания, когда возможны коллизии
(например одинаковых имен\типов).
- @Profile - аннотация для создания профилей конфигурации проекта. Может применяться как к Beans, так и
к конфигурационным классам.
- @ConfigurationProperties - используется для привязки значений из конфигурационных файлов
(application.properties или application.yml) к Java-классам. Она помогает удобно управлять настройками
приложения и избегать жестко закодированных значений. Создает Java объект из application файла или его части.
АОП(AOP)
АОП(AOP) - Аспектно-ориентированное программирование. Идея АОП заключается в выделении так называемой
сквозной
функциональности. Помогает разделить бизнес логику примеры: логгирование, обработка исключений, трассировка,
аутентификация и проверка прав доступа.
Spring bean lifecycle:
- Container started
- Bean instantiated
- Dependencies Injected
- Custom init() method
- Custom utility method
- Custom destroy() method
- Singleton - создаётся при старте приложения и удаляется в конце.
- Prototype - создаётся при вызове и удаляется GC.
Для управления созданием и уничтожением bean у нас есть методы:
- init-method
- destroy-method
- @PostConstruct
- @PreDestroy
Создание компонента:
- Spring создает экземпляр компонента.
- Spring внедряет значения и ссылки на компоненты в свойства данного компонента.
- Если компонент реализует интерфейс BeanNameAware, Spring передает идентификатор компонента методу setBeanName()
- Если компонент реализует интерфейс BeanFactoryAware, Spring вызывает метод setBeanFactory() , передавая ему саму фабрику компонентов.
- Если компонент реализует интерфейс ApplicationContextAware, Spring вызывает метод setApplicationContext(), передавая ему ссылку на вмещающий контекст приложения. Контейнер компонентов 54 Введение в Spring
- Если какие-либо из компонентов реализуют интерфейс BeanPost Processor, Spring вызывает их методы postProcessBeforeIniti alization().
- Если какие-либо из компонентов реализуют интерфейс InitializingBean, Spring вызывает их методы afterPropertiesSet() . Аналогично, если компонент был объявлен с атрибутом initmethod , вызывается указанный метод инициализации.
- Если какие-либо из компонентов реализуют интерфейс BeanPostProcessor, Spring вызывает их методы postProcessAfterI nitialization().
- В этот момент компонент готов к использованию приложением и будет сохраняться в контексте приложения, пока он не будет уничтожен.
- Если какие-либо из компонентов реализуют интерфейс DisposableBean, Spring вызывает их методы destroy() . Аналогично, если компонент был объявлен с атрибутом destroy-method, вызывается указанный метод.
Spring Value
Пример создания пустого List как default
@Value("${my.list.of.strings:}#{T(java.util.Collections).emptyList()}")
private List<String> myList;
Интерфейсы для слоев DAO и Service
Интерфейсы нужны для возможности замены реализации не затрагивая основной код. При использовании интерфейсов
основной код ничего не знает об деталях реализации (слабая связанность). Соответственно, реализацию можно
вынести в отдельный модуль (изолировать сложность). Если реализация отделена от основного кода, то
становится легко подменить её в тестах, например, подсунуть in memory реализацию, вместо БД.