java中设置refresh,如何以功能方式在@RefreshScope中注册spring bean?

  • Post author:
  • Post category:java


我有一些自己定制的“入门”项目 . 我正在努力迁移到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?