0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В Spring бином называется объект, который управляется, создается и настраивается Spring-контейнером. Эти объекты создаются на базе конфигурации, которая задается с помощью аннотаций. Только эти объекты участвуют в инъекции зависимостей при сборке Spring-приложения.</p>
1
<p>В Spring бином называется объект, который управляется, создается и настраивается Spring-контейнером. Эти объекты создаются на базе конфигурации, которая задается с помощью аннотаций. Только эти объекты участвуют в инъекции зависимостей при сборке Spring-приложения.</p>
2
<h2>Конфигурация</h2>
2
<h2>Конфигурация</h2>
3
<p>Далее мы рассмотрим два способа создания бинов.</p>
3
<p>Далее мы рассмотрим два способа создания бинов.</p>
4
<h3>Создание бинов на основе классов</h3>
4
<h3>Создание бинов на основе классов</h3>
5
<p>Если мы просто создадим класс и попытаемся внедрить его объект с помощью аннотации @Autowired, то ничего не получится. Spring никак не реагирует на обычные классы. Чтобы превратить этот класс в бин, нужно пометить его аннотацией, например:</p>
5
<p>Если мы просто создадим класс и попытаемся внедрить его объект с помощью аннотации @Autowired, то ничего не получится. Spring никак не реагирует на обычные классы. Чтобы превратить этот класс в бин, нужно пометить его аннотацией, например:</p>
6
<ul><li>@Component - любой класс общего назначения, объект которого мы хотим получить в приложении</li>
6
<ul><li>@Component - любой класс общего назначения, объект которого мы хотим получить в приложении</li>
7
<li>@Repository - репозитории</li>
7
<li>@Repository - репозитории</li>
8
<li>@RestController- контроллеры</li>
8
<li>@RestController- контроллеры</li>
9
</ul><p>Изучим пример с репозиторием:</p>
9
</ul><p>Изучим пример с репозиторием:</p>
10
<p>Внедрение происходит так:</p>
10
<p>Внедрение происходит так:</p>
11
<h3>Создание бинов на основе методов</h3>
11
<h3>Создание бинов на основе методов</h3>
12
<p>В реальных проектах внедряться могут не только объекты классов, реализованные программистом. Еще можно внедрять объекты классов, которые находятся в библиотеках. Например, есть известная библиотека<a>datafaker</a>, которая используется в тестах для генерации данных. Работает она так:</p>
12
<p>В реальных проектах внедряться могут не только объекты классов, реализованные программистом. Еще можно внедрять объекты классов, которые находятся в библиотеках. Например, есть известная библиотека<a>datafaker</a>, которая используется в тестах для генерации данных. Работает она так:</p>
13
<p>Существует два основных способа использования этой библиотеки внутри Spring Boot. Первый - это создание объекта напрямую в том месте, где мы хотим его использовать. В примере с Faker мы будем создавать и использовать объект внутри теста:</p>
13
<p>Существует два основных способа использования этой библиотеки внутри Spring Boot. Первый - это создание объекта напрямую в том месте, где мы хотим его использовать. В примере с Faker мы будем создавать и использовать объект внутри теста:</p>
14
<p>Второй - это создание бина с помощью метода. Для этого нам нужно создать метод внутри любого класса, помеченного аннотацией @Configuration. Проще всего это сделать в классе с методом main, потому что аннотация @SpringBootApplication автоматически добавляет аннотацию @Configuration:</p>
14
<p>Второй - это создание бина с помощью метода. Для этого нам нужно создать метод внутри любого класса, помеченного аннотацией @Configuration. Проще всего это сделать в классе с методом main, потому что аннотация @SpringBootApplication автоматически добавляет аннотацию @Configuration:</p>
15
<p>Теперь Faker можно внедрять как обычную зависимость:</p>
15
<p>Теперь Faker можно внедрять как обычную зависимость:</p>
16
<h2>Жизненный цикл бинов</h2>
16
<h2>Жизненный цикл бинов</h2>
17
<p>У бинов есть понятие жизненного цикла, что позволяет встраиваться в процесс их создания и уничтожения. Делается это с помощью аннотаций методов @PostConstruct и @PreDestroy внутри класса нужного бина:</p>
17
<p>У бинов есть понятие жизненного цикла, что позволяет встраиваться в процесс их создания и уничтожения. Делается это с помощью аннотаций методов @PostConstruct и @PreDestroy внутри класса нужного бина:</p>
18
<p>Типичные ситуации, когда это бывает нужно:</p>
18
<p>Типичные ситуации, когда это бывает нужно:</p>
19
<ul><li>Чтение конфигурации и инициализация некоторых свойств</li>
19
<ul><li>Чтение конфигурации и инициализация некоторых свойств</li>
20
<li>Установка ресурсов, таких как соединение с базой данных</li>
20
<li>Установка ресурсов, таких как соединение с базой данных</li>
21
<li>Регистрация бинов во внешних системах</li>
21
<li>Регистрация бинов во внешних системах</li>
22
</ul><h2>Область видимости бинов</h2>
22
</ul><h2>Область видимости бинов</h2>
23
<p>Область видимости бинов определяет жизненный цикл и саму видимость бинов внутри контекста приложения. Другими словами, она определяет, сколько объектов создается и как они переиспользуются разными частями приложения. Всего существует шесть областей видимости.</p>
23
<p>Область видимости бинов определяет жизненный цикл и саму видимость бинов внутри контекста приложения. Другими словами, она определяет, сколько объектов создается и как они переиспользуются разными частями приложения. Всего существует шесть областей видимости.</p>
24
<p>По умолчанию используется область<em>Singleton</em>. Бины с такой областью создаются ровно один раз за все время существования приложения. Каждая инъекция такого бина использует один и тот же объект.</p>
24
<p>По умолчанию используется область<em>Singleton</em>. Бины с такой областью создаются ровно один раз за все время существования приложения. Каждая инъекция такого бина использует один и тот же объект.</p>
25
<p>Область<em>Prototype</em>означает, что новый бин будет создан на каждый запрос (инъекцию):</p>
25
<p>Область<em>Prototype</em>означает, что новый бин будет создан на каждый запрос (инъекцию):</p>
26
<p>Область Request означает, что новый бин создается на каждый HTTP-запрос. Актуально только для веб-приложений:</p>
26
<p>Область Request означает, что новый бин создается на каждый HTTP-запрос. Актуально только для веб-приложений:</p>
27
<p>Информацию по остальным областям видимости можно прочитать в<a>официальной документации</a>.</p>
27
<p>Информацию по остальным областям видимости можно прочитать в<a>официальной документации</a>.</p>