Sobes.tech
Назад к вопросам
Junior — Middle
64

Возможна ли регистрация собственных скоупов бинов в контексте инверсии управления?

Компании, где спрашивали
DCloud

Ответ от нейросети

sobes.tech AI

Да, в контексте инверсии управления (IoC) и особенно в таких фреймворках, как Spring, возможно создавать и регистрировать собственные скоупы бинов. Скоуп определяет жизненный цикл и область видимости бина. Помимо стандартных скоупов (singleton, prototype, request, session и т.д.), можно реализовать пользовательский скоуп, например, для специфичных задач.

Для этого нужно реализовать интерфейс Scope и зарегистрировать его в контейнере. Пример в Spring:

public class CustomScope implements Scope {
    private Map<String, Object> beans = new ConcurrentHashMap<>();

    @Override
    public Object get(String name, ObjectFactory<?> objectFactory) {
        return beans.computeIfAbsent(name, k -> objectFactory.getObject());
    }

    @Override
    public Object remove(String name) {
        return beans.remove(name);
    }

    // Другие методы интерфейса (registerDestructionCallback, resolveContextualObject, getConversationId)
}

Затем регистрируете этот скоуп в ConfigurableBeanFactory:

ConfigurableBeanFactory beanFactory = ...;
beanFactory.registerScope("customScope", new CustomScope());

После этого можно использовать аннотацию @Scope("customScope") для бинов с вашим скоупом.