Содержание
Проработать
Basic
- Spring Framework. Бины
- Spring Framework. Жизненный цикл
- 10 Spring and Spring Boot Common Mistakes You Need To STOP
- Java Spring Контекст
- Spring MVC — Hello World, пример приложения.
- Spring Framework - The Basics
- Введение в Spring, или что делать, если по всему проекту @Autowired и @Component, а вы не понимаете, что это
- Spring Framework Guide
- Инициализация Spring: XML, аннотации, Java конфигурация и
- Собеседование по Java EE — Spring Framework (вопросы и ответы). Часть 1
- Как писать на 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 Framework
- Spring – лучший Java фреймворк для создания веб-приложений
- Learn Spring Fundamentals for Beginners - Full Course
- Spring vs Spring Boot - разница
Spring MVC
- Spring MVC — основные принципы
- Spring’s RequestBody and ResponseBody Annotations
- web.xml и маппинг сервлетов
- Изучаем ResponseEntity и избавляемся от него в контроллерах Spring
- Spring MVC — загрузка файла с валидацией
@Transactional
- Как на самом деле работает @Transactional Spring?
- @Transactional в Spring под капотом
- Руководство по Spring. Управление транзакциями.
- Советы и ошибки в Spring Transactional
- Тестирование Spring приложений. Транзакции в тестировании
- Управление транзакциями в Spring: @Transactional в деталях
- Транзакции в Spring Framework
- Транзакции. Теория и практика на Spring
Кеширование
- Кеширование в Spring Framework 3.1
- Кеширование данных — Java Spring
- @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 в деталях
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
Реактивного программирования
- Основы реактивного программирования на Java, лекция 1
Что это:
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 Session
- Spring Vault - предназначен для интеграции с HashiCorp Vault, который является инструментом для
управления секретами, ключами доступа и другой конфиденциальной информацией в распределённых приложениях.
- Spring CDS(Class Data Sharing) - это механизм, который используется для оптимизации времени запуска Java
приложений, включая приложения, основанные на Spring. Сокращает время загрузки классов и уменьшить
использование памяти путем предварительной загрузки и кэширования некоторых системных классов и
библиотек в специально подготовленные файлы, называемые архивами классов.
- AOP
- Вопросы на собеседование
REST Requests
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
- не будут выполняться.
- request - один экземпляр bean на каждый HTTP запрос. Касается исключительно ApplicationContext.
- session - один экземпляр bean на каждую HTTP сессию. Касается исключительно ApplicationContext.
- global session - аналогичен session - он используется в портлетных веб приложениях. Когда вы используете
globalSession в "стандартном" сервлетном приложении эти beans имеют scope session.
Spring аннотации:
Controller annotations:
- @ResponseBody - показывает что данный метод может возвращать кастомный объект в виде xml, json...
- @RequestMapping - используется для маппинга url запроса на указанный метод или класс(общий префикс url).
Можно указывать конкретный HTTP-метод, который будет обрабатываться (GET/POST), передавать
параметры запроса?, пример: @RequestMapping(method = RequestMethod.GET).
- @GetMapping - указывает GET mapping для метода.
- @PostMapping - указывает POST mapping для метода.
- @PutMapping - указывает PUT mapping для метода.
- @PatchMapping - указывает PATCH mapping для метода.
- @DeleteMapping - указывает DELETE mapping для метода.
Аннотации для создания Bean:
- @Component - общий компонент фреймворка.
- @Controller - подтип класса @Component для контроллеров. Похож на обычный сервлет (HttpServlet)
(работающий с объектами HttpServletRequest и HttpServletResponse). Просматривает классы, аннотированные
@Controller и обнаруживает в них аннотации @RequestMapping. Нужен для ответа веб страницей.
- @RestController - @Controller + @ResponseBody. Нужен для ответа телом(JSON, XML и
тд.).
- @Service - подтип класса @Component для сервис-слоя.
- @Repository - подтип класса @Component для DAO слоя. Перехватывает исключения из базы и меняет их под
стандарты Spring.
- @Configuration - аннотация уровня класса, указывающая, что объект является источником определений
компонента. Классы @Configuration объявляют bean-компоненты с помощью методов, аннотированных @Bean.
Advice
- @ControllerAdvice - для оборачивания объекта, возвращаемого контроллерами, в новый класс на уровне
DispatcherServlet.
- @RestControllerAdvice - @ControllerAdvice + @ResponseBody
Другие:
- @Bean - используется для явного определения Beans в Java-конфигурации.
- @Autowired - автоматически установить значение поля.
- @Transactional - перед исполнением метода помеченного данной аннотацией начинается транзакция,
после выполнения метода транзакция коммитится, при выбрасывании RuntimeException откатывается.
- @Lookup - помечается метод, который будет возвращать разные объекты при каждом вызове метода.
- @Scope - для установки области жизни bean. Используется с аннотациями Component и Bean.
- @PathVariable - показывает, что параметр метода должен быть связан с переменной из урл-адреса.
- @PostConstruct - аннотация для метода, который будет вызван после вызова конструктора бина.
- @PreDestroy - аннотация для метода, который будет вызван перед уничтожением бина.
- @Qualifier - спользуется совместно с @Autowired для уточнения данных связывания, когда возможны коллизии
(например одинаковых имен\типов).
- @Profile - аннотация для создания профилей конфигурации проекта. Может применяться как к бинам так и
к конфигурационным классам.
АОП(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;