Spring IoC контейнер: пользовательские области применения бинов

Механизм определения бинов расширяемый. Вы можете определить свои собственные области или даже переопределить существующие области, хотя последнее считается плохой практикой, и вы не можете переопределить встроенные области singleton и prototype.

Создание пользовательской области применения бинов

Чтобы интегрировать ваши пользовательские области в контейнер Spring, вам необходимо реализовать интерфейс org.springframework.beans.factory.config.Scope.

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

Например, реализация области действия session возвращает bean-объект в области session (если он не существует, метод возвращает новый экземпляр bean-компонента после привязки его к session для использования в будущем). Следующий метод возвращает объект из базовой области:

Java

Object get(String name, ObjectFactory<?> objectFactory)

Kotlin

fun get(name: String, objectFactory: ObjectFactory<*>): Any

Например, реализация области действия session удаляет сессионный компонент из базового session. Объект должен быть возвращен, но вы можете вернуть null, если объект с указанным именем не найден. Следующий метод удаляет объект из базовой области:

Java

Object remove(String name)

Kotlin

fun remove(name: String): Any

Следующий метод регистрирует обратные вызовы (callbacks), которые должна выполнить область, когда она уничтожена или когда уничтожен указанный объект в области:

Java

void registerDestructionCallback(String name, Runnable destructionCallback)

Kotlin

fun registerDestructionCallback(name: String, destructionCallback: Runnable)

Следующий метод получает идентификатор диалога для базовой области:

Java

String getConversationId()

Kotlin

fun getConversationId(): String

Этот идентификатор отличается для каждой области. Для реализации в рамках session этот идентификатор может быть идентификатором session.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки