Что такое бин весной?

Что такое бин весной?

1. обзор

Бин является ключевой концепцией Spring Framework. Таким образом, понимание этого понятия имеет решающее значение для овладения фреймворком и его эффективного использования.

К сожалению,there aren’t clear answers to a simple question – what a Spring bean really is.. Некоторые объяснения доходят до такого низкого уровня, что упускается общая картина, тогда как некоторые слишком расплывчаты.

Этот урок попытается пролить свет на тему, начиная с описания в официальной документации.

Дальнейшее чтение:

Почему стоит выбрать Spring в качестве Java Framework?

Быстрый и практический обзор основного ценностного предложения Spring Framework.

Read more

Понимание getBean () в Spring

Узнайте о различных вариантах метода Spring BeanFactory.getBean () для получения экземпляра компонента из контейнера Spring.

Read more

2. Определение фасоли

Вот определение фасоли вthe Spring Framework documentation:

В Spring объекты, составляющие основу вашего приложения и управляемые контейнером Spring IoC, называются beans. Бин - это объект, который создается, собирается и иным образом управляется контейнером Spring IoC.

Это краткое определение доходит до сути:but misses an important thing – Spring IoC container. Давайте спустимся в кроличью нору, чтобы узнать, что это такое и какие преимущества оно приносит.

3. Инверсия контроля

Проще говоря,Ihttps: //www.example.com/inversion-control-and-dependency-injection-in-spring [nversion of Control], или для краткости IoC, этоa process in which an object defines its dependencies without creating them. Этот объект делегирует работа по построению таких зависимостей для контейнера IoC.

Давайте начнем с объявления пары классов предметной области, прежде чем углубляться в IoC.

3.1. Доменные классы

Предположим, у нас есть объявление класса:

public class Company {
    private Address address;

    public Company(Address address) {
        this.address = address;
    }

    // getter, setter and other properties
}

Этому классу нужен сотрудник типаAddress:

public class Address {
    private String street;
    private int number;

    public Address(String street, int number) {
        this.street = street;
        this.number = number;
    }

    // getters and setters
}

3.2. Традиционный подход

Обычно мы создаем объекты с помощью конструкторов их классов:

Address address = new Address("High Street", 1000);
Company company = new Company(address);

В этом подходе нет ничего плохого, но не лучше ли было бы лучше управлять зависимостями?

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

Управление таким количеством объектов - не что иное, как кошмар. This is where Inversion of Control comes to the rescue.с

Вместо того, чтобы создавать зависимости самостоятельно, объект может извлечь свои зависимости из контейнера IoC. All we need to do is to provide the container with appropriate configuration metadata.с

3.3. Конфигурация Бина

Во-первых, давайте украсим классCompany аннотацией@Component:

@Component
public class Company {
    // this body is the same as before
}

Вот класс конфигурации, предоставляющий метаданные компонента в контейнер IoC:

@Configuration
@ComponentScan(basePackageClasses = Company.class)
public class Config {
    @Bean
    public Address getAddress() {
        return new Address("High Street", 1000);
    }
}

Класс конфигурации создает bean-компонент типаAddress. Он также содержит аннотацию@ComponentScan, которая указывает контейнеру искать bean-компоненты в пакете, содержащем классCompany.

Когда контейнер Spring IoC создает объекты этих типов, все объекты называются компонентами Spring, поскольку ими управляет контейнер IoC.

3.4. IoC в действии

Поскольку мы определили beans в классе конфигурации,we’ll need an instance of the AnnotationConfigApplicationContext class to build up a container:

ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);

Быстрый тест проверяет существование и значения свойств наших bean-компонентов:

Company company = context.getBean("company", Company.class);
assertEquals("High Street", company.getAddress().getStreet());
assertEquals(1000, company.getAddress().getNumber());

Результат доказывает, что контейнер IoC правильно создал и инициализировал компоненты.

4. Заключение

В этом руководстве было дано краткое описание bean-компонентов Spring и их взаимосвязи с контейнером IoC.

Полный исходный код этого руководства можно найти наover on GitHub.