我有一些自己定制的“入门”项目 . 我正在努力迁移到Spring Boot 2.0,Framework 5.0以及这些和其他地方的功能bean定义 .
在"starter"项目中,我为功能bean定义所遵循的模式使用 org.springframework.context.ApplicationContextInitializer
.
示例配置类尝试在“刷新”范围内注册bean .
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));
}
}
然后,在 META-INF/spring.factories
文件中列出此 MyConfiguration
.
# context init
org.springframework.context.ApplicationContextInitializer=\
my.package.MyConfiguration
当我尝试在类路径上运行带有此启动器的应用程序时,我在启动时看到异常,表明没有刷新范围 .
java.lang.IllegalStateException: No Scope registered for scope name 'refresh'
我的猜测是这一定是订购问题 . 我的bean创建时的意思是,还没有创建 RefreshScope
bean? org.springframework.cloud.autoconfigure.RefreshAutoConfiguration
是声明 RefreshScope
bean的内容 .
是否有一个好的或建议的方法来功能性地注册需要在_1369497中的spring bean?