我有一些自己定制的“入门”项目 . 我正在努力迁移到Spring Boot 2.0,Framework 5.0以及这些和其他地方的功能bean定义 .
在”starter”项目中,我为功能bean定义所遵循的模式使用 org.springframework.context.ApplicationContextInitializer .
示例配置类尝试在“刷新”范围内注册bean .
package my.package;
public class MyConfiguration implements ApplicationContextInitializer {
@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?