Перейти к основному содержимому

Путеводитель по Spring BeanFactory

· 4 мин. чтения

1. Введение

В этой статье основное внимание будет уделено изучению Spring BeanFactory API .

Интерфейс BeanFactory предоставляет простой, но гибкий механизм настройки для управления объектами любого характера через контейнер Spring IoC. Давайте рассмотрим некоторые основы, прежде чем углубляться в этот центральный Spring API.

2. Основы — бобы и контейнеры

Проще говоря, bean-компоненты — это объекты Java, которые составляют основу приложения Spring и управляются контейнером Spring IoC. Помимо управления контейнером, в bean-компоненте нет ничего особенного (во всех остальных отношениях это один из многих объектов в приложении).

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

3. Зависимости Maven

Давайте добавим необходимую зависимость Maven в файл pom.xml . Мы будем использовать зависимость Spring Beans для настройки BeanFactory:

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>

4. Интерфейс BeanFactory

Интересно начать с определения интерфейса в пакете org.springframework.beans.factory и обсудить здесь некоторые из его важных API.

4.1. API getBean( )

Различные версии метода getBean() возвращают экземпляр указанного bean-компонента, который может быть общим или независимым в приложении. ``

4.2. API- интерфейс containsBean()

Этот метод подтверждает, содержит ли эта фабрика компонентов компонент с заданным именем. В частности, он подтверждает, может ли getBean(java.lang.String) получить экземпляр компонента с заданным именем.

4.3. API isSingleton( )

API isSingleton можно использовать для запроса, является ли этот компонент общим синглтоном. То есть, если getBean(java.lang.String) всегда будет возвращать один и тот же экземпляр.

4.4. API isPrototype( )

Этот API подтвердит, возвращает ли getBean(java.lang.String) независимые экземпляры — то есть bean-компонент, сконфигурированный с областью действия прототипа, или нет.

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

Нам нужно использовать операцию isSingleton(java.lang.String) для явной проверки общего экземпляра синглтона.

4.5. Другие API

В то время как метод isTypeMatch(String name, Class targetType) проверяет, соответствует ли bean-компонент с заданным именем указанному типу, метод getType ( String name ) полезен для определения типа bean-компонента с заданным именем.

Наконец, getAliases ( String name ) возвращает псевдонимы для данного имени компонента, если они есть.

5. API BeanFactory

BeanFactory содержит определения bean-компонентов и создает их экземпляры всякий раз, когда этого требует клиентское приложение, что означает:

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

Прочтите Application Context , чтобы узнать, что он может сделать дополнительно.

6. Определение компонента

Давайте определим простой bean-компонент:

public class Employee {
private String name;
private int age;

// standard constructors, getters and setters
}

7. Настройка BeanFactory с помощью XML

Мы можем настроить BeanFactory с помощью XML. Создадим файл bean factory-example.xml:

<bean id="employee" class="com.foreach.beanfactory.Employee">
<constructor-arg name="name" value="Hello! My name is Java"/>
<constructor-arg name="age" value="18"/>
</bean>
<alias name="employee" alias="empalias"/>

Обратите внимание, что мы также создали псевдоним для bean- компонента employee .

8. BeanFactory с ClassPathResource

ClassPathResource принадлежит пакету org.springframework.core.io . Давайте запустим быстрый тест и инициализируем XmlBeanFactory с помощью ClassPathResource , как показано ниже:

public class BeanFactoryWithClassPathResourceTest {

@Test
public void createBeanFactoryAndCheckEmployeeBean() {
Resource res = new ClassPathResource("beanfactory-example.xml");
BeanFactory factory = new XmlBeanFactory(res);
Employee emp = (Employee) factory.getBean("employee");

assertTrue(factory.isSingleton("employee"));
assertTrue(factory.getBean("employee") instanceof Employee);
assertTrue(factory.isTypeMatch("employee", Employee.class));
assertTrue(factory.getAliases("employee").length > 0);
}
}

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

В этой быстрой статье мы узнали об основных методах, предлагаемых API Spring BeanFactory , и примере, иллюстрирующем конфигурацию и ее использование.

Весь код, поддерживающий эти примеры, доступен на GitHub .