1. введение
Эта статья будет посвящена изучению API Spring BeanFactory .
Интерфейс BeanFactory предоставляет простой, но гибкий механизм настройки для управления объектами любой природы с помощью контейнера Spring IoC. Давайте рассмотрим некоторые основы, прежде чем углубляться в этот центральный API Spring.
2. Основы – Фасоль и контейнеры
Проще говоря, бобы-это объекты java, которые образуют основу приложения Spring и управляются контейнером Spring IoC. Помимо управления контейнером, в бобе нет ничего особенного (во всех остальных отношениях это один из многих объектов в приложении).
Контейнер Spring отвечает за создание экземпляров, настройку и сборку компонентов. Контейнер получает информацию о том, какие объекты создавать, настраивать и управлять, читая метаданные конфигурации, которые мы определяем для приложения.
3. Зависимости Maven
Давайте добавим необходимую зависимость Maven | в pom.xml файл. Мы будем использовать зависимость Spring Beans для настройки BeanFactory:
org.springframework spring-beans 5.2.8.RELEASE
4. Интерфейс BeanFactory
Интересно начать с того, чтобы взглянуть на определение интерфейса в org.springframework.beans.factory package и обсудить некоторые из его важных API здесь.
4.1. API getBean()
Различные версии метода |/getBean() возвращают экземпляр указанного компонента, который может быть общим или независимым в приложении.
4.2. API containsBean()
Этот метод подтверждает, содержит ли эта фабрика бобов боб с заданным именем. Более конкретно, он подтверждает, что getBean(java.lang.String) возможность получения экземпляра компонента с заданным именем.
4.3. API isSingleton()
API isSingleton можно использовать для запроса, является ли этот компонент общим синглтоном. То есть, если getBean(java.lang.String) всегда будет возвращать один и тот же экземпляр.
4.4. API прототипа()
Этот API подтвердит, если getBean(java.lang.String) возвращает независимые экземпляры – то есть боб, настроенный с областью прототипа, или нет.
Важно отметить, что этот метод, возвращающий false , явно не указывает на одноэлементный объект. Он указывает на несамостоятельные экземпляры, которые также могут соответствовать другим областям.
Нам нужно использовать isSingleton(java.lang.Строка) операция явной проверки общего экземпляра синглтона.
4.5. Другие API
В то время как метод isTypeMatch(имя строки, класс TargetType) проверяет, соответствует ли боб с заданным именем указанному типу, GetType ( String name ) полезен для идентификации типа боба с заданным именем.
Наконец, getAliases ( String | name ) возвращает псевдонимы для данного имени компонента, если таковые имеются.
5. BeanFactory API
BeanFactory содержит определения компонентов и создает их экземпляры всякий раз, когда клиентское приложение запрашивает их, что означает:
- Он заботится о жизненном цикле компонента, создавая его экземпляр и вызывая соответствующие методы уничтожения
- Он способен создавать ассоциации между зависимыми объектами при их создании
- Важно отметить , что BeanFactory не поддерживает внедрение зависимостей на основе аннотаций, в то время как ApplicationContext , надмножество BeanFactory
Обязательно прочтите Контекст приложения , чтобы узнать, что он может сделать дополнительно.
6. Определение боба
Давайте определим простой боб:
public class Employee { private String name; private int age; // standard constructors, getters and setters }
7. Настройка BeanFactory с помощью XML
Мы можем настроить BeanFactory с помощью XML. Давайте создадим файл bean factory-example.xml:
Обратите внимание, что мы также создали псевдоним для компонента 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. Заключение
В этой краткой статье мы узнали об основных методах, предлагаемых Spring BeanFactory API, а также о примере, иллюстрирующем конфигурацию и ее использование.
Код, поддерживающий эти примеры, доступен на GitHub .