как получить объем бобов на весну? - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть следующий класс:

public class ServiceFactory {

    private ServiceFactory() {

    }

    public static <T extends XXXX> T loadService(Class<T> klass) {
        ApplicationContext applicationContext = ApplicationContextProvider.getApplicationContext();
        return applicationContext.getBean(klass);
    }
}

Он загружает бины во время выполнения (у меня есть особая причина, чтобы сделать это так).

Мне нужно проверить, является ли бинаннотируется @Scope (BeanDefinition.SCOPE_PROTOTYPE) или просто заставляет его быть прототипом.

Как мне это сделать?

1 Ответ

0 голосов
/ 28 февраля 2019

Сначала вам нужно найти имя бина для вашего класса.Тогда вы можете искать BeanDefinition под этим именем и получать область действия.

public <T> String findScope(ConfigurableApplicationContext applicationContext, Class<T> type) {
        String[] names = applicationContext.getBeanFactory().getBeanNamesForType(type);
        if(names.length != 1){
            throw new IllegalArgumentException("Could not find bean of type" + type.getCanonicalName());
        }
        return applicationContext.getBeanFactory().getBeanDefinition(names[0]).getScope();
    }
...