Spring Boot
Теория: Бины и область видимости
В Spring бином называется объект, который управляется, создается и настраивается Spring-контейнером. Эти объекты создаются на базе конфигурации, которая задается с помощью аннотаций. Только эти объекты участвуют в инъекции зависимостей при сборке Spring-приложения.
Конфигурация
Далее мы рассмотрим два способа создания бинов.
Создание бинов на основе классов
Если мы просто создадим класс и попытаемся внедрить его объект с помощью аннотации @Autowired, то ничего не получится. Spring никак не реагирует на обычные классы. Чтобы превратить этот класс в бин, нужно пометить его аннотацией, например:
@Component— любой класс общего назначения, объект которого мы хотим получить в приложении@Repository— репозитории@RestController— контроллеры
Изучим пример с репозиторием:
Внедрение происходит так:
Создание бинов на основе методов
В реальных проектах внедряться могут не только объекты классов, реализованные программистом. Еще можно внедрять объекты классов, которые находятся в библиотеках. Например, есть известная библиотека datafaker, которая используется в тестах для генерации данных. Работает она так:
Существует два основных способа использования этой библиотеки внутри Spring Boot. Первый – это создание объекта напрямую в том месте, где мы хотим его использовать. В примере с Faker мы будем создавать и использовать объект внутри теста:
Второй – это создание бина с помощью метода. Для этого нам нужно создать метод внутри любого класса, помеченного аннотацией @Configuration. Проще всего это сделать в классе с методом main, потому что аннотация @SpringBootApplication автоматически добавляет аннотацию @Configuration:
Теперь Faker можно внедрять как обычную зависимость:
Жизненный цикл бинов
У бинов есть понятие жизненного цикла, что позволяет встраиваться в процесс их создания и уничтожения. Делается это с помощью аннотаций методов @PostConstruct и @PreDestroy внутри класса нужного бина:
Типичные ситуации, когда это бывает нужно:
- Чтение конфигурации и инициализация некоторых свойств
- Установка ресурсов, таких как соединение с базой данных
- Регистрация бинов во внешних системах
Область видимости бинов
Область видимости бинов определяет жизненный цикл и саму видимость бинов внутри контекста приложения. Другими словами, она определяет, сколько объектов создается и как они переиспользуются разными частями приложения. Всего существует шесть областей видимости.
По умолчанию используется область Singleton. Бины с такой областью создаются ровно один раз за все время существования приложения. Каждая инъекция такого бина использует один и тот же объект.
Область Prototype означает, что новый бин будет создан на каждый запрос (инъекцию):
Область Request означает, что новый бин создается на каждый HTTP-запрос. Актуально только для веб-приложений:
Информацию по остальным областям видимости можно прочитать в официальной документации.



