Что такое бин java spring
Перейти к содержимому

Что такое бин java spring

  • автор:

Что такое бин java spring

Spring-бины − это классы, созданием экземпляров которых и установкой в них зависимостей управляет контейнер фреймворка Spring. Бины предназначены для реализации бизнес-логики приложения.

Spring Bean представляет собой singleton, то есть в некотором блоке приложения существует только один экземпляр данного класса. Поэтому, если бин содержит изменяемые данные в полях (другими словами, имеет состояние), то обращение к таким данным необходимо синхронизировать.

Бины и область видимости — Java: Корпоративные приложения на Spring Boot

В Spring бином называется объект, который управляется, создается и настраивается Spring-контейнером. Эти объекты создаются на базе конфигурации, которая задается с помощью аннотаций. Только эти объекты участвуют в инъекции зависимостей при сборке Spring-приложения.

Конфигурация

Далее мы рассмотрим два способа создания бинов.

Создание бинов на основе классов

Если мы просто создадим класс и попытаемся внедрить его объект с помощью аннотации @Autowired , то ничего не получится. Spring никак не реагирует на обычные классы. Чтобы превратить этот класс в бин, нужно пометить его аннотацией, например:

  • @Component — любой класс общего назначения, объект которого мы хотим получить в приложении
  • @Repository — репозитории
  • @RestController — контроллеры

Изучим пример с репозиторием:

package io.hexlet.spring.repository; import hexlet.code.model.User; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository // Во время компиляции этот интерфейс превращается в конкретный класс public interface UserRepository extends JpaRepositoryUser, Long>  > 

Внедрение происходит так:

@RestController @RequestMapping("/users") public class UserController  @Autowired private UserRepository userRepository; > 

Создание бинов на основе методов

В реальных проектах внедряться могут не только объекты классов, реализованные программистом. Еще можно внедрять объекты классов, которые находятся в библиотеках. Например, есть известная библиотека datafaker , которая используется в тестах для генерации данных. Работает она так:

import net.datafaker.Faker; var faker = new Faker(); var name = faker.name().fullName(); // Miss Samanta Schmidt var firstName = faker.name().firstName(); // Emory var lastName = faker.name().lastName(); // Barton var streetAddress = faker.address().streetAddress(); // 60018 Sawayn Brooks Suite 449 

Существует два основных способа использования этой библиотеки внутри Spring Boot. Первый – это создание объекта напрямую в том месте, где мы хотим его использовать. В примере с Faker мы будем создавать и использовать объект внутри теста:

@SpringBootTest @AutoConfigureMockMvc public class UsersControllerTest  @BeforeEach public void setUp()  var faker = new Faker(); // Тут создаем нужные данные > 

Второй – это создание бина с помощью метода. Для этого нам нужно создать метод внутри любого класса, помеченного аннотацией @Configuration . Проще всего это сделать в классе с методом main , потому что аннотация @SpringBootApplication автоматически добавляет аннотацию @Configuration :

@SpringBootApplication public class Application  public static void main(String[] args)  SpringApplication.run(Application.class, args); > @Bean public Faker getFaker()  // Имя метода не важно return new Faker(); > > 

Теперь Faker можно внедрять как обычную зависимость:

@SpringBootTest @AutoConfigureMockMvc public class UsersControllerTest  @Autowired private Faker faker; @BeforeEach public void setUp()  // Тут создаем нужные данные > 

Жизненный цикл бинов

У бинов есть понятие жизненного цикла, что позволяет встраиваться в процесс их создания и уничтожения. Делается это с помощью аннотаций методов @PostConstruct и @PreDestroy внутри класса нужного бина:

import jakarta.annotation.PostConstruct; import org.springframework.stereotype.Component; @Component public class MyBean  private String message; @PostConstruct public void init()  this.message = "Bean is initialized!"; System.out.println(message); > @PreDestroy public void cleanup()  System.out.println("Cleaning up resources or performing final actions!"); > // . other methods . > 

Типичные ситуации, когда это бывает нужно:

  • Чтение конфигурации и инициализация некоторых свойств
  • Установка ресурсов, таких как соединение с базой данных
  • Регистрация бинов во внешних системах

Область видимости бинов

Область видимости бинов определяет жизненный цикл и саму видимость бинов внутри контекста приложения. Другими словами, она определяет, сколько объектов создается и как они переиспользуются разными частями приложения. Всего существует шесть областей видимости.

По умолчанию используется область Singleton. Бины с такой областью создаются ровно один раз за все время существования приложения. Каждая инъекция такого бина использует один и тот же объект.

Область Prototype означает, что новый бин будет создан на каждый запрос (инъекцию):

import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.stereotype.Component; @Scope("prototype") @Component public class PrototypeBean <> 

Область Request означает, что новый бин создается на каждый HTTP-запрос. Актуально только для веб-приложений:

import org.springframework.stereotype.Component; import org.springframework.web.context.annotation.RequestScope; @RequestScope @Component public class RequestScopedBean <> 

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

Руководство по Spring. Введение в Bean-ы.

Мы продолжаем наш цикл туториалов по Spring Framework, и сегодня речь пойдёт о сущности под названием Bean (бин).

Бины – это объекты, которые являются основой приложения и управляются Spring IoC контейнером. Эти объекты создаются с помощью конфигурационных метаданных, которые указываются в контейнере (например, XML- ). Я уже говорил о них в предыдущих главах.

Определение бина содержит метаданные конфигурации, которые необходимы управляющему контейнеру для получения следующей информации:

  • Как создать бин;
  • Информацию о жизненном цикле бина;
  • Зависимости бина.

В Spring Framework существуют такие свойства, определяющие бины:

class

Этот атрибут является обязательным и указывает конкретный класс Java-приложения, который будет использоваться для создания бина.

name

Уникальный идентификатор бина. В случае конфигурации с помощью xml-файла, вы можете использовать свойство “id” и/или “name” для идентификации бина.

scope

Это свойство определяет область видимости создаваемых объектов. (Прим. Отсутствие в русском языке достойного перевода этого свойства бинов могут вызвать затруднения, но более подробно оно будет рассмотрено далее).

constructor-arg

Определяет конструктор, использующийся для внедрения зависимости. Более подробно – далее.

properties

Определяет свойства внедрения зависимости. Более подробно рассмотрим далее.

initialization method

Здесь определяется метод инициализации бина

destruction method

Метод уничтожения бина, который будет использоваться при уничтожении контейнера, содержащего бин.

autowiring mode

Определяет режим автоматического связывания при внедрении зависимости. Более подробно рассмотрим далее.

lazy-initialization mode

Режим ленивой инициализации даёт контейнеру IoC команду создавать экземпляр бина при первом запросе, а не при запуске приложения.

Контейнер IoC не зависит от формата, в котором передаются метаданные. Существует 3 основных метода передачи метаданных контейнеру Spring IoC:

  • Конфигурационный XML-файл
  • Конфигурация на основе аннотаций
  • Конфигурация на основе Java

Ранее мы уже рассматривали как передаются метаданные на основе XML-файла. Теперь давайте рассмотрим пример XML-файла с различными свойствами

xml-config

Конфигурирование бинов с помощью аннотаций мы рассмотрим позже в отдельной главе.

Основы Spring Beans для начинающих

Spring Framework — это мощный инструмент, который может быть сложным для понимания новичками, особенно когда речь идет о таком ключевом понятии, как Spring Beans.

Всякий раз, когда встречается упоминание о Spring Beans, появляются вопросы: что это такое, как они используются и какое отношение они имеют к Dependency Injection?

Что такое Spring Beans?

Spring Beans — это просто объекты, которые формируются и управляются Spring IoC (Inversion of Control) контейнером. В контексте Spring, Bean — это объект, который подготовлен для использования и можно получить на запрос. По сути, это объекты, которые заполняются и конфигурируются контейнером Spring.

Как они используются?

Spring Beans могут использоваться в любом месте приложения. Когда Bean создается, он готов к использованию и может быть внедрен в любой другой Bean или компонент приложения. Это делается через механизм Dependency Injection.

Dependency Injection и Spring Beans

Dependency Injection — это процесс, при котором Spring контейнер «внедряет» объекты-зависимости в другие объекты. Это ключевой аспект в работе Spring, который позволяет достичь слабой связанности и высокой модульности в приложениях.

Представьте, что у вас есть объект Car, которому нужен объект Engine для работы. Вместо того, чтобы самому создавать объект Engine внутри Car, Spring контейнер создаст объект Engine и «внедрит» его в Car автоматически. Объекты Engine и Car в этом случае будут являться Spring Beans.

Преимущество этого в том, что код становится более чистым, модульным и легко тестируемым, поскольку зависимости между объектами управляются автоматически.

В заключении, Spring Beans — это ключевая концепция в Spring Framework, которая позволяет легко управлять и конфигурировать объекты в приложении. Они играют важную роль в реализации Dependency Injection и создании модульных, тестируемых приложений.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *