HTML Diff
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>