Руководство по Spring BeanFactory

Руководство по Spring BeanFactory

1. Вступление

В этой статье речь пойдет оexploring the Spring BeanFactory API.

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

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

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

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

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

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


    org.springframework
    spring-beans
    5.1.4.RELEASE

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

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

4.1. APIgetBean()

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

4.2. APIcontainsBean()

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

4.3. APIisSingleton()

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

4.4. APIisPrototype()

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

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

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

4.5. Другие API

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

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

5. BeanFactory API

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-компонента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 SpringBeanFactory, и о примере, иллюстрирующем конфигурацию и ее использование.

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