У меня есть несколько моих собственных "стартовых" проектов.Я работаю над переходом на 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
?