Как функционально зарегистрировать весенние бобы в @RefreshScope? - PullRequest
0 голосов
/ 17 октября 2018

У меня есть несколько моих собственных "стартовых" проектов.Я работаю над переходом на Spring Boot 2.0, Framework 5.0 и определения функциональных компонентов в этих и других местах.

В «начальных» проектах шаблон, который я использую для определения функциональных компонентов, использует org.springframework.context.ApplicationContextInitializer.

Пример класса конфигурации, пытающегося зарегистрировать бин в области действия «refresh».

package my.package;

public class MyConfiguration implements ApplicationContextInitializer<GenericApplicationContext> {

    @Override
    public void initialize(GenericApplicationContext context) {
        context.registerBean(MyConfiguration.class);
        context.registerBean("myBean",
            MyBean.class,
            () -> new MyBeanImpl(context.getBean(MyBeanDependency.class)),
            bd -> bd.setScope("refresh"),
            bd -> bd.setLazyInit(true));
    }
}

Затем укажите этот MyConfiguration в файле META-INF/spring.factories как таковой.

# context init
org.springframework.context.ApplicationContextInitializer=\
my.package.MyConfiguration

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

java.lang.IllegalStateException: No Scope registered for scope name 'refresh'

Я предполагаю, что это должно бытьвопрос заказа.Имеется в виду, что во время создания моего бина боб RefreshScope еще не был создан?org.springframework.cloud.autoconfigure.RefreshAutoConfiguration - это то, что объявляет bean-компонент RefreshScope.

Есть ли хороший или предлагаемый способ функциональной регистрации бобов весной, которые должны быть в @RefreshScope?

...